簡體   English   中英

熊貓:將每一行轉換為 <column name,row value> dict並添加為新列

[英]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.

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