2017-05-25 116 views
1

我有例如3个不同的数据框,每个数据框都有不同的列,除了在所有3个数据框中存在相同标题的一列。 在这一列中,我有例如名称,并且我想要计算名称在不同数据框中重复的次数。Python熊猫匹配数据框

因此,例如,这些都是3个dataframes:

DF1:

col1 col2 names col3 
a  a  bbb  a 
a  a  ccc  a 
a  a  bbb  a 

DF2:

col4 col5 names col6 
a  a  bbb  a 
a  a  zzz  a 
a  a  qqq  a 

DF3:

col7 col8 names col9 
a  a  zzz  a 
a  a  zzz  a 
a  a  rrr  a 

所以输出数据帧将是:

names df1 df2 df3 total 
bbb  V  V  X  2 
ccc  V  X  X  1 
zzz  X  V  V  2 
qqq  X  V  X  1 
rrr  X  X  V  1 

所以输出的数据帧检查其名称存在于其他任何df和它出现了多少次最后一列计数。

是否有一个简单的方法与大熊猫做这个搜索和计数,或者我必须切换到列表并开始迭代通过列表?

回答

2

您可以使用concat + get_dummies + groupby + reset_index + max + T + sum + replace

dfs = [df1, df2, df3] 
names = ['df1', 'df2', 'df3'] 
df = pd.concat([df['names'] for df in dfs], keys=names) 
df = pd.get_dummies(df.reset_index(level=1, drop=True)).groupby(level=0).max().T 
df['total'] = df.sum(axis=1) 
df[names] = df[names].replace({0:'X', 1:'V'}) 
print (df) 
    df1 df2 df3 total 
bbb V V X  2 
ccc V X X  1 
qqq X V X  1 
rrr X X V  1 
zzz X V V  2 
+0

的伟大工程,但一个问题:第一,我怎么能过滤和隐藏行,他们的 '总' 是例如少于2? – TheDaJon

+0

很高兴能帮到你!什么意思隐藏?删除行?用NaN取代? – jezrael

+0

删除行 – TheDaJon