2017-05-25 117 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