【发布时间】:2022-01-03 05:28:39
【问题描述】:
我有两个如下所示的 DataFrame:
df_1 = pd.DataFrame({
'wag': [111, 111, 222],
'date': ['2019-08-30', '2019-09-20', '2019-08-10']
})
和
df_2 = pd.DataFrame({
'wag': [111, 111, 111, 222, 222, 333, 333, 333],
'msr_date': ['2019-08-30', '2019-08-30', '2019-08-30',
'2019-08-30', '2019-08-30', '2019-08-30',
'2019-08-30', '2019-08-30'],
'measurements': [1, 2, 3, 4, 5, 6, 7, 8]
})
df_1 和df_2 如下:
| wag | date |
|---|---|
| 111 | 2019-08-30 |
| 111 | 2019-09-20 |
| 222 | 2019-08-10 |
| wag | msr_date | measurements |
|---|---|---|
| 111 | 2019-03-29 | 1 |
| 111 | 2019-03-19 | 2 |
| 111 | 2019-03-10 | 3 |
| 222 | 2019-09-30 | 4 |
| 222 | 2019-09-20 | 5 |
| 333 | 2019-08-30 | 6 |
| 333 | 2019-08-30 | 7 |
| 333 | 2019-09-20 | 8 |
所以,我有两个 DataFrames df_1 和 df_2,我想同时遍历它们并过滤 df_2。我需要在两个表中都基于wag 进行迭代。
如果df_1中的wag在df_2中,那么我必须比较date和mrs_date和
- 如果
mrs_date <= date然后我追加wag的所有行 - 否则,我会检查
df_1中的该行是否还有一个条件,对于该wag并再次重复日期比较。 - 当该 wags 的条件/行完成后,我们将转到
wag的下一个值。
例如,这里我首先检查df_1 的第一行,如果df_2 中的mrs_date <= date 则将所有行追加到df_new。如果没有,那么我会去下一个date 寻找那个wag。如果我们有,如果没有,请检查另一个wag。所以最后,对于这个例子,我会得到df_new,如下所示:
| wag | msr_date | measurements |
|---|---|---|
| 111 | 2019-03-29 | 1 |
| 111 | 2019-03-19 | 2 |
| 111 | 2019-03-10 | 3 |
实际上,df_1 和df_2 中有很多值,所以for_loop 应该很复杂,我找不到方法。如果不清楚我是如何描述任务的,请询问。
【问题讨论】:
标签: python pandas dataframe for-loop