我有一個這樣的熊貓資料框。
Time Source Level County Town
0 2021-12-01 10:01:41.443 NaN NaN NaN NaN
1 NaN Test 3 C1 C1-T1
2 NaN Test 5- C2 C2-T0
3 NaN Test 5- C2 C2-T1
4 2021-12-01 10:01:46.452 NaN NaN NaN NaN
我想附加 Town 值,它基于行具有相同的 Source、Level 和 County 值。
我嘗試過 isin、groupby、diff(但我的值是 str),但仍然沒有弄清楚。
下面的圖片是我想要的。
Time Source Level County Town
0 2021-12-01 10:01:41.443 NaN NaN NaN NaN
1 NaN Test 3 C1 C1-T0
2 NaN Test 5- C2 C2-T0, C2-T1
3 2021-12-01 10:01:46.452 NaN NaN NaN NaN
真的很感謝你的幫助!
uj5u.com熱心網友回復:
我們可以使這項作業的方法是使用groupby()andapply(list)從中創建一個串列,然后我們可以將其轉換為以逗號分隔的字串。為了更好地理解,讓我們將其分成 2 個步驟。
就我個人而言,我會將這些資料作為 Pandas 系列中的串列保留,而不是執行第 2 步。格式化為由逗號分隔的字串可能不適合使用。
第1步:
output = df.groupby(['Time','Source','Level','County'])['Town'].apply(list).reset_index()
回傳:
Time Source Level County Town
0 2021-12-01 10:01:41.443 NaN NaN NaN [nan]
1 2021-12-01 10:01:46.452 NaN NaN NaN [nan]
2 NaN Test 3 C1 [C1-T1]
3 NaN Test 5- C2 [C2-T0, C2-T1]
現在,我們可以將它們正確地格式化為字串(第 2 步):
output['Town'] = pd.Series([', '.join([y for y in x if type(y) == str]) for x in output['Town']]).replace('',np.nan)
輸出我們想要的結果:
Time Source Level County Town
0 2021-12-01 10:01:41.443 NaN NaN NaN NaN
1 2021-12-01 10:01:46.452 NaN NaN NaN NaN
2 NaN Test 3 C1 C1-T1
3 NaN Test 5- C2 C2-T0, C2-T1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370822.html
