我有两个Python Pandas数据帧,如下所示:
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K1', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K0', 'K0', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6'],
'B': ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
print left
A B key1 key2
0 A0 B0 K0 K0
1 A1 B1 K0 K1
2 A2 B2 K1 K0
3 A3 B3 K1 K0
4 A4 B4 K1 K0
5 A5 B5 K1 K0
6 A6 B6 K2 K1
print right
C D key1 key2
0 C0 D0 K0 K0
1 C1 D1 K1 K0
2 C2 D2 K1 K0
3 C3 D3 K2 K0
我想在一定条件下合并这两个数据帧:
我尝试了如下方法:
^{pr2}$如果我从左边的数据帧中删除重复的条目,那么我也没有得到预期的输出。在
然后,我试图从结果数据框中删除重复的条目,然后得到以下数据框:
result.drop_duplicates(subset = ['A','B','key1','key2'], inplace=True)
print result
A B key1 key2 C D
0 A0 B0 K0 K0 C0 D0
1 A1 B1 K0 K1 NaN NaN
2 A2 B2 K1 K0 C1 D1
4 A3 B3 K1 K0 C1 D1
6 A4 B4 K1 K0 C1 D1
8 A5 B5 K1 K0 C1 D1
10 A6 B6 K2 K1 NaN NaN
问题是列C和D包含相同的值,这是因为默认的keep=First行为。我想改变这个行为,这样我就可以得到低于预期的数据帧。在
编辑:
如果left Dataframe的key1和key2在右Dataframe的key1和key2中匹配,则将C和D列追加到该行;如果列C和D已经追加到同一行,则将C和D保留为Nan。在
预期输出:
A B key1 key2 C D
0 A0 B0 K0 K0 C0 D0
1 A1 B1 K0 K1 NaN NaN
2 A2 B2 K1 K0 C1 D1
3 A3 B3 K1 K0 C2 D2
4 A4 B4 K1 K0 NaN Nan
5 A5 B5 K1 K0 NaN Nan
6 A6 B6 K2 K1 NaN NaN
不幸的是,你的问题并没有描述你想要达到什么样的目标,因为它对任何有类似问题的人都是有用的。在
实际上,您希望为重复的合并键获得排序合并。在
继续的逻辑方法是add a sequence number使合并的多个键唯一。接下来是一个小的合并。在
相关问题 更多 >
编程相关推荐