簡體   English   中英

比較每行的數據框列中的元素 - 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM