我有兩個像下面這樣的資料幀:
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在下面:
| 搖擺 | 日期 |
|---|---|
| 111 | 2019-08-30 |
| 111 | 2019-09-20 |
| 222 | 2019-08-10 |
| 搖擺 | msr_date | 測量 |
|---|---|---|
| 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 |
所以,我有兩個 DataFrame df_1,df_2我想同時遍歷它們并過濾df_2. 我需要基于wag兩個表進行迭代。
如果wag在df_1是df_2以后我就比較date和mrs_date和
- 如果
mrs_date <= date然后我附加所有行wag - 否則,我檢查該行是否還有一個條件
df_1,wag然后再次重復日期的比較。 - 當這些搖擺的條件/行完成時,我們轉到 的下一個值
wag。
例如,在這里我首先檢查 的第一行,df_1如果mrs_date <= date在,df_2則將所有行附加到df_new. 如果沒有,那么我去下date為wag。如果我們有一個如果沒有然后檢查另一個wag。所以最后,對于這個例子,我將得到df_new如下:
| 搖擺 | msr_date | 測量 |
|---|---|---|
| 111 | 2019-03-29 | 1 |
| 111 | 2019-03-19 | 2 |
| 111 | 2019-03-10 | 3 |
實際上, indf_1和 in 中有很多值,df_2所以for_loop應該非常復雜,我找不到如何去做的方法。如果不清楚我如何描述任務,請詢問。
uj5u.com熱心網友回復:
合并wag列上的 2 個資料框,然后僅保留與您的條件匹配的行msr_date <= date。最后,除去列date從df_1并洗掉重復的行。
>>> df_2.merge(df_1, on='wag', how='left') \
.query('msr_date <= date') \
.drop(columns='date').drop_duplicates()
wag msr_date measurements
0 111 2019-03-29 1
2 111 2019-03-19 2
4 111 2019-03-10 3
uj5u.com熱心網友回復:
使用 for 回圈:
new_df = pd.DataFrame(data=None, columns=df_2.columns)
for idx, row in df_1.iterrows():
for idx2, row2 in df_2.iterrows():
if row['wag'] == row2['wag'] and row2['msr_date'] <= row['date']:
new_df = new_df.append(row2).drop_duplicates()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/365142.html
上一篇:在一個圖上繪制多個圖
