我有一個包含字典串列的熊貓系列。我想用某些條件決議字典的內容并將結果存盤到新列中。
以下是一些可以使用的資料:
import pandas as pd
df = pd.DataFrame({'d': [[{'br': 1, 'ba': 1, 'r': 100},
{'ba': 1, 'r': 80},
{'br': 2, 'ba': 1, 'r': 150},
{'br': 1, 'ba': 1, 'r': 90}],
[{'br': 1, 'ba': 1, 'r': 100},
{'ba': 1, 'r': 80},
{'br': 2, 'ba': 1, 'r': 150}]],
'id': ['xxas', 'yxas'],
'name': [A, B]
})
我想用一些條件邏輯來決議每個字典的內容。檢查串列中的每個 dicts 并將列命名為鍵br和ba. 將valueofr key分配為列值。如果沒有找到鍵,br在本例中,賦值0為值。預期輸出:
id br ba r name
xxas 1 0 100 A
xxas 0 1 80 A
xxas 2 1 150 A
xxas 1 1 90 A
yxas 1 1 100 B
yxas 0 1 80 B
yxas 2 1 150 B
uj5u.com熱心網友回復:
嘗試:
df = pd.concat([df.pop("d").explode().apply(pd.Series).fillna(0), df], axis=1)
print(df[["id", "br", "ba", "r", "name"]].astype(int, errors="ignore"))
印刷:
id br ba r name
0 xxas 1 1 100 A
0 xxas 0 1 80 A
0 xxas 2 1 150 A
0 xxas 1 1 90 A
1 yxas 1 1 100 B
1 yxas 0 1 80 B
1 yxas 2 1 150 B
uj5u.com熱心網友回復:
explode作為管道的方法:
df2 = (df
.explode('d', ignore_index=True)
.pipe(lambda d: d.drop(columns='d')
.join(d['d'].apply(pd.Series)
.fillna(0, downcast='infer')))
)
輸出:
id name br ba r
0 xxas A 1 1 100
1 xxas A 0 1 80
2 xxas A 2 1 150
3 xxas A 1 1 90
4 yxas B 1 1 100
5 yxas B 0 1 80
6 yxas B 2 1 150
或者使用concat和字典理解:
df2 = (pd
.concat({k: pd.DataFrame(v)
for k,v in df['d'].iteritems()})
.fillna(0, downcast='infer')
.droplevel(1)
.join(df.drop(columns='d'))
)
輸出:
br ba r id name
0 1 1 100 xxas A
0 0 1 80 xxas A
0 2 1 150 xxas A
0 1 1 90 xxas A
1 1 1 100 yxas B
1 0 1 80 yxas B
1 2 1 150 yxas B
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454577.html
上一篇:如何在Javascript中使用map()選擇嵌套物件的屬性?
下一篇:定義類中的值串列
