我是熊猫的新手,怀疑这有一个简单的答案,但现在它让我感到困惑。我想从多个数据帧(具有相同的列)中选择行,其中一列中的值出现在所有数据帧中。
所以如果我有以下内容:
import numpy as np
import pandas as pd
df1 = pd.DataFrame({'Col1'['Adams','Baker','Cash','Jones','Thomas'],\
'Col2': ['A','B','C','D','E'],'Col3':[10,11,12,13,14]})
df2 = pd.DataFrame({'Col1':['Adams','Cash','Fox','Jones','Johnson'],\
'Col2': ['D','E','F','G','H'],'Col3':[40,50,60,70,80]})
df3 = pd.DataFrame({'Col1': ['Adams','Barns','Jones','Smith','Thomas'],\
'Col2':['F','G','J','L','M'],'Col3':[21,21,22,23,24]})
print df1
print df2
print df3
Run Code Online (Sandbox Code Playgroud)
给予:
Col 1 Col2 Col3
0 Adams A 10
1 Baker B 11
2 Cash C 12
3 Jones D 13
4 Thomas E 14
Col1 Col2 Col3
0 Adams D 40
1 Cash E 50
2 Fox F 60
3 Jones G 70
4 Johnson H 80
Col1 Col2 Col3
0 Adams F 21
1 Barns G 21
2 Jones J 22
3 Smith L 23
4 Thomas M 24
Run Code Online (Sandbox Code Playgroud)
我想结束:
Adams A 10
Adams D 40
Adams F 21
Jones D 13
Jones G 70
Jones J 22
Run Code Online (Sandbox Code Playgroud)
有没有一种简洁的方法来做到这一点?
你可以先找到共同的价值观:
common = \
set.intersection(set(df1.Col1), set(df2.Col1), set(df3.Col1))
Run Code Online (Sandbox Code Playgroud)
然后连接其值在公共值集中的行:
pd.concat([
df1[df1.Col1.isin(common)],
df2[df2.Col1.isin(common)],
df3[df3.Col1.isin(common)]]).sort_values(by='Col1')
Run Code Online (Sandbox Code Playgroud)