如何在python pandas中键为空时执行右连接

2024-09-29 21:29:15 发布

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

在python pandas中键为null时,是否可以执行右连接。 也就是说,我是否可以将DateFrames连接起来,以便只从右侧生成与左侧不匹配的值?在


Tags: pandasnulldateframes
3条回答

我认为这最好用索引选择操作来表示。要在一个帧中而不是在另一个帧中查找所有索引,请尝试对两个Dataframe index对象使用-运算符,就像index对象是内置的python set对象一样。例如:

In [1]: dfa = pd.DataFrame({'A': range(5)}, index=range(5))

In [2]: dfb = pd.DataFrame({'A': range(10, 15)}, index=range(3,8))

In [3]: dfa
Out[3]: 
   A
0  0
1  1
2  2
3  3
4  4

In [4]: dfb
Out[4]: 
    A
3  10
4  11
5  12
6  13
7  14

In [5]: dfb.loc[dfb.index - dfa.index]
Out[5]: 
    A
5  12
6  13
7  14

您可以在每个数据帧中生成一个虚拟列,使用pd合并()右联接数据帧,然后使用掩码筛选空值。在

In [1]: dfa = pd.DataFrame({'A': range(4, 8)})
In [2]: dfb = pd.DataFrame({'A': range(6, 10)})
In [3]: dfa['ones'] = 1
In [4]: dfb['ones'] = 1
In [5]: dfa 
Out[5]: 
   A  ones
0  4  1
1  5  1
2  6  1
3  7  1

In [6]: dfb 
Out[6]: 
   A  ones
0  6  1
1  7  1
2  8  1
3  9  1

In [7]: df = pd.merge(dfa, dfb, on = 'A', how = 'right')
In [8]: df
Out[8]: 
    A   ones_x  ones_y
0   6   1       1
1   7   1       1
2   8   NaN     1
3   9   NaN     1

In [8]: df[df.ones_x.notnull()][['A']]
Out[8]: 
    A
0   6
1   7

更紧凑的合并解决方案:

df = dfa.merge(dfb, indicator='i', how='outer').query('i == "right_only"').drop('i', 1)
print (df)

从这里采取的解决方案:

https://stackoverflow.com/a/49487564/9539462

相关问题 更多 >

    热门问题