【发布时间】:2016-07-25 19:08:23
【问题描述】:
我有一个与语法相关的简单问题,但无法弄清楚。
我有两个数据框 df1 和 df2,我希望 a) 在特定列上合并,而 b) 同时检查每个数据框中的另一列是否存在布尔关系(>、
关键部分是我需要同时执行 a 和 b,因为数据帧非常大。在一个步骤中简单地合并两个数据帧,然后在第二步中删除不通过布尔逻辑的行是行不通的。这是因为合并后的数据帧会非常非常大,导致我两个内存不足。
所以,我有:
df1:
Col_1 Col_2 Test_Value
0 A B 1
1 B A 3
2 A B 2
3 B A 5
4 A B 2
5 B A 1
和
df2:
Col_1 Col_2 Test_Value
0 A B 1
1 B A 3
2 A B 2
3 B A 5
4 A B 2
5 B A 1
(为简单起见,两个数据框完全相同)
我想合并它们,像这样:
df3 = pd.merge(df1, df2, left_on=['Col_1'], right_on=['Col_2'])
同时过滤 df1['Test Value'] 小于 df2['Test Value'] 的任何行,如下所示:
df3.loc[df3['Test_Value_x'] < df3['Test_Value_y']]
结果是:
Col_1_x Col_2_x Test_Value_x Col_1_y Col_2_y Test_Value_y
0 A B 1 B A 3
1 A B 1 B A 5
3 A B 2 B A 3
4 A B 2 B A 5
6 A B 2 B A 3
7 A B 2 B A 5
16 B A 1 A B 2
17 B A 1 A B 2
同样,我可以使用上面的代码分两步执行此操作,但它会给我带来内存问题,因为中间数据帧会很大。
那么有没有可以结合这个的语法,
df3 = pd.merge(df1, df2, left_on=['Col_1'], right_on=['Col_2'])
有了这个,
df3.loc[df3['Test_Value_x'] < df3['Test_Value_y']]
【问题讨论】:
标签: python pandas merge boolean