Python 巨蟒与海螺相交
我正在努力获取熊猫中两个数据帧的交集Python 巨蟒与海螺相交,python,pandas,concat,Python,Pandas,Concat,我正在努力获取熊猫中两个数据帧的交集 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 N
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个数据帧的交集,这样结果中只显示第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]
正如它应该做的那样,将数据帧内容添加到一起。为什么轴上的concat=0不起作用?如何按索引连接数据帧?您想尝试合并
concat
更适合将多个帧粘合在一起,merge将处理重叠行的检测以及所有这些:
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\u index()
)。一般来说,如果可能的话,在数据帧上有一个唯一的索引是个好主意。我已经尝试了各种方法来解决我的问题。似乎唯一能够获得正确结果的函数是以下函数:
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
然而,我认为可能有其他一些运行时成本较低的方法来解决我的问题。如果你有任何建议,请毫不犹豫地提出