python - Pandas:将每一行转换为 <column name,row value> 字典并添加为新列

标签 python pandas numpy apply

我有一个 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/

相关文章:

python - 在 for 循环中引用数组

python - python中的这个程序如何工作?

python - 将条件值从一列复制到另一列

python - 每 x 分钟执行一个函数 : sched or threading. 定时器?

Python 正则表达式 : return the whole sentence with a certain word in it from period to period

python - 比较多列中的值并在 Python 中的另一列中添加新值

python - 如何应用具有不同输入参数的相同函数在 pandas 数据框中创建新列?

python:创建numpy非零索引,值对

具有列表理解的Python字典值分配

python - 基于其他数据框向 Pandas 数据框添加新列