我有一個包含許多列和行的大 df,通常每個識別符號有兩行,因為 df 用于對帳。有沒有辦法簡化導致不匹配的非識別符號列的識別?
import pandas as pd
df = pd.DataFrame({'col_1': ['A', 'B', 'C', 'B', 'C', 'D', 'E'],
'identifier': [ 1, 2, 3, 2, 3, 4, 4],
'col_3': [ 10, 20, 30, 21, 31, 40, 41],
'col_4': [ 1, 1, 1, 1, 1, 1, 1]
})
在上面的df中,它將是
- col_1 用于識別符號 4(D 與 E)
- col_3 用于識別符號 2/3/4(20 與 21、30 與 31、40 與 41)
對任何可以輕松隔離導致不匹配的列、它們的值和識別符號的表示形式開放。
uj5u.com熱心網友回復:
IIUC,您可以將列聚合為集合并保留具有多個元素的列:
s = df.groupby('identifier').agg(set).stack()
out = s[s.str.len().gt(1)]
輸出:
identifier
2 col_3 {20, 21}
3 col_3 {30, 31}
4 col_1 {D, E}
col_3 {40, 41}
dtype: object
進一步聚合:
out.reset_index(level=1)['level_1'].groupby(level=0).agg(list)
輸出:
identifier
2 [col_3]
3 [col_3]
4 [col_1, col_3]
Name: level_1, dtype: object
uj5u.com熱心網友回復:
mismatch = df.groupby('identifier').agg(set).applymap(lambda x: x if len(x) > 1 else np.nan)
col_1_mismatch = mismatch[['col_1']].dropna()
col_3_mismatch = mismatch[['col_3']].dropna()
print(col_1_mismatch)
print(col_3_mismatch)
輸出:
col_1
identifier
4 {D, E}
col_3
identifier
2 {20, 21}
3 {30, 31}
4 {40, 41}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/488311.html
上一篇:如何過濾分組總和
下一篇:For回圈的計數在某處丟失
