我有一个 df 这样的
STATUS_ID STATUS_NM
0 1 A
1 2 B
2 3 C
3 4 D
我想通过 apply 执行一行,为单独列中的每一行获取一个键、值 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...
我相信是我的 pandas 版本导致了这个问题。这已在此处讨论 - 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
关于python - Pandas:将每一行转换为 <column name,row value> 字典并添加为新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45624245/