PythonPandas海螺

2024-10-03 11:21:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力获得pandas中两个数据帧的交集。在

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'似乎开始工作,但结果不是我真正需要的:

^{pr2}$

因为它将数据帧内容添加到一起。为什么concat over axis=0不起作用?如何按索引连接数据帧?在


Tags: 数据innanoutrowsdf1ksusharusel1994
2条回答

我试过各种方法来解决我的问题。似乎只有下面的函数才能获得正确的结果:

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

不过,我认为可能还有其他一些运行时开销更低的方法来解决我的问题。如果你有任何建议,不要犹豫。在

你想尝试合并。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_index())。一般来说,如果可能的话,最好在数据帧上建立一个唯一的索引。在

相关问题 更多 >