![](/img/trans.png)
[英]Compare each row in one dataframe to each row in another dataframe in Python
[英]Compare elements in dataframe columns for each row - Python
我有一個非常龐大的數據幀(行數),但讓我們假設它是這樣的:
A B C D E F
0 2 5 2 2 2 2
1 5 2 5 5 5 5
2 5 2 5 2 5 5
3 2 2 2 2 2 2
4 5 5 5 5 5 5
我需要查看哪一個值最常出現在每行的一組列中。 例如,最常出現在每行的ABC列和DEF列中的值,並將它們放在另一列中。 在這個例子中,我的預期輸出是
ABC DEF
2 2
5 5
5 5
2 2
5 5
我怎么能用Python做呢??? 謝謝!!
這是使用列groupby
一種方法
mapperd={'A':'ABC','B':'ABC','C':'ABC','D':'DEF','E':'DEF','F':'DEF'}
df.groupby(mapperd,axis=1).agg(lambda x : x.mode()[0])
Out[826]:
ABC DEF
0 2 2
1 5 5
2 5 5
3 2 2
4 5 5
為了獲得良好的性能,您可以使用底層的numpy數組,並使用scipy.stats.mode
來計算模式 :
from scipy import stats
cols = ['ABC','DEF']
a = df.values.reshape(-1, df.shape[1]//2)
pd.DataFrame(stats.mode(a, axis=1).mode.reshape(-1,2), columns=cols)
ABC DEF
0 2 2
1 5 5
2 5 5
3 2 2
4 5 5
您嘗試使用列標題索引篩選:
grp = ['ABC','DEF']
pd.concat([df.loc[:,[*g]].mode(1).set_axis([g], axis=1, inplace=False) for g in grp], axis=1)
輸出:
ABC DEF
0 2 2
1 5 5
2 5 5
3 2 2
4 5 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.