我很难在pandas中获得两个DataFrame的交集。
In [22]: df1[0:10]
Out[22]:
0 1 2 3 4 5 6 7
0793oezim 3 NaN NaN NaN NaN NaN NaN NaN
Dashkent 6 7 15 4 4 1 1 NaN
Deniskildeev 3 NaN NaN NaN NaN NaN NaN NaN
Krylova 3 NaN NaN NaN NaN NaN NaN NaN
Ksusha 12 2 4 4 NaN NaN NaN NaN
Rusel1994 3 NaN NaN NaN NaN NaN NaN NaN
Sportsman 31 1 2 4 4 NaN NaN NaN
User495 6 7 15 3 4 3 NaN NaN
User498 12 10 4 NaN NaN NaN NaN NaN
User499 4 23 5 9 NaN NaN NaN NaN
[10 rows x 8 columns]
In [23]: test = [df1[0:10],df1[8:10]]
In [24]: pd.concat(test,axis=0,join='inner')
Out[24]:
0 1 2 3 4 5 6 7
0793oezim 3 NaN NaN NaN NaN NaN NaN NaN
Dashkent 6 7 15 4 4 1 1 NaN
Deniskildeev 3 NaN NaN NaN NaN NaN NaN NaN
Krylova 3 NaN NaN NaN NaN NaN NaN NaN
Ksusha 12 2 4 4 NaN NaN NaN NaN
Rusel1994 3 NaN NaN NaN NaN NaN NaN NaN
Sportsman 31 1 2 4 4 NaN NaN NaN
User495 6 7 15 3 4 3 NaN NaN
User498 12 10 4 NaN NaN NaN NaN NaN
User499 4 23 5 9 NaN NaN NaN NaN
User498 12 10 4 NaN NaN NaN NaN NaN
User499 4 23 5 9 NaN NaN NaN NaN
[12 rows x 8 columns]
我想要的只是按索引找到2个DataFrame的交集,所以结果中只出现第8到第10行。
当我将轴更改为1时,join ='intersect'似乎开始工作但结果不是我真正需要的:
In [25]: pd.concat(test,axis=1,join='inner')
Out[25]:
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
User498 12 10 4 NaN NaN NaN NaN NaN 12 10 4 NaN NaN NaN NaN NaN
User499 4 23 5 9 NaN NaN NaN NaN 4 23 5 9 NaN NaN NaN NaN
[2 rows x 16 columns]
因为它将DataFrames内容添加到应该做的事情中。为什么concat over axis = 0不起作用?如何通过索引连接DataFrame?
答案 0 :(得分:1)
您想尝试合并。 concat
更适合将多个帧粘合在一起,合并将处理重叠行的检测以及所有这些:
In [107]: df1
Out[107]:
index 0 1 2 3 4 5 6 7
0 0793oezim 3 NaN NaN NaN NaN NaN NaN NaN
1 Dashkent 6 7 15 4 4 1 1 NaN
2 Deniskildeev 3 NaN NaN NaN NaN NaN NaN NaN
3 Krylova 3 NaN NaN NaN NaN NaN NaN NaN
4 Ksusha 12 2 4 4 NaN NaN NaN NaN
5 Rusel1994 3 NaN NaN NaN NaN NaN NaN NaN
6 Sportsman 31 1 2 4 4 NaN NaN NaN
7 User495 6 7 15 3 4 3 NaN NaN
8 User498 12 10 4 NaN NaN NaN NaN NaN
9 User499 4 23 5 9 NaN NaN NaN NaN
[10 rows x 9 columns]
In [108]: df2
Out[108]:
index 0 1 2 3 4 5 6 7
8 User498 12 10 4 NaN NaN NaN NaN NaN
9 User499 4 23 5 9 NaN NaN NaN NaN
[2 rows x 9 columns]
In [109]: pd.merge(df1, df2, how='inner')
Out[109]:
index 0 1 2 3 4 5 6 7
0 User498 12 10 4 NaN NaN NaN NaN NaN
1 User499 4 23 5 9 NaN NaN NaN NaN
[2 rows x 9 columns]
请注意,我重置了索引(df1.reset_index()
)。一般来说,如果可能的话,最好在DataFrame上使用唯一索引。
答案 1 :(得分:0)
我尝试了各种方法来解决我的问题。似乎唯一能够获得正确结果的是下面的函数:
def dataFrameMaskSplitbyIndex(df1,df2):
mask1 = df1.index.isin(df2.index)
mask2 = df2.index.isin(df1.index)
tempdf = df1[-mask1]
dfleft = tempdf.copy()
tempdf = df2[-mask2]
dfright = tempdf.copy()
tempdf = df1[mask1]
dfcenter = tempdf.copy()
return dfleft,dfcenter,dfright
但是我认为可能还有其他一些运行时间较少的方法来解决我的问题。如果您有任何建议,请不要犹豫。