![](/img/trans.png)
[英]Convert a pandas DataFrame to a dict with row and column name for each value
[英]Pandas: convert each row to a <column name,row value> dict and add as a new column
我有一個df
STATUS_ID STATUS_NM
0 1 A
1 2 B
2 3 C
3 4 D
我想通過應用來執行一行以獲取鍵,並在單獨的列中為每一行設置值par。 最終的df應該是
STATUS
0 {STATUS_ID:1,STATUS_NM:A}
1 {STATUS_ID:2,STATUS_NM:B}
2 {STATUS_ID:3,STATUS_NM:C}
3 {STATUS_ID:4,STATUS_NM:D}
更新:我試過df[cols].apply(pd.Series.to_dict, axis=1)
和df[cols].apply(lambda x: x.to_dict(), axis=1)
但沒有得到實際的字典,我得到<built-in method values of dict object at 0x00...
我相信這是造成該問題的我的熊貓版本。 這已經在這里討論過了-https: //github.com/pandas-dev/pandas/issues/8735因此,問題是是否還有另一種方法可以執行相同的操作來規避此問題。 我無法將Pandas版本更新為0.17
df['STATUS'] = df.apply(pd.Series.to_dict, axis=1)
df
Out:
STATUS_ID STATUS_NM STATUS
0 1 A {'STATUS_NM': 'A', 'STATUS_ID': 1}
1 2 B {'STATUS_NM': 'B', 'STATUS_ID': 2}
2 3 C {'STATUS_NM': 'C', 'STATUS_ID': 3}
3 4 D {'STATUS_NM': 'D', 'STATUS_ID': 4}
如果在實際的DataFrame中也有其他列,則可能需要指定要在字典中包含的列。
cols = ['STATUS_ID', 'STATUS_NM']
df['STATUS'] = df[cols].apply(pd.Series.to_dict, axis=1)
一種替代方法是遍歷DataFrame:
lst = []
for _, row in df[cols].iterrows():
lst.append({col: row[col] for col in cols})
這將創建一個列表:
[{'STATUS_ID': 1, 'STATUS_NM': 'A'},
{'STATUS_ID': 2, 'STATUS_NM': 'B'},
{'STATUS_ID': 3, 'STATUS_NM': 'C'},
{'STATUS_ID': 4, 'STATUS_NM': 'D'}]
您可以直接將其分配給您的DataFrame:
df['STATUS'] = lst
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.