Pandas - 如何将属性保存到数组中并将它们的值保存到新列中

Posted

技术标签:

【中文标题】Pandas - 如何将属性保存到数组中并将它们的值保存到新列中【英文标题】:Pandas - how to save attributes into an array and preserve their values into new columns 【发布时间】:2022-01-13 21:25:26 【问题描述】:

我有一个具有属性"key""name""value"的数据框。对于每个"key" 组,我希望将属性"name" 存储在一个数组中。"value"然后将每个名称的名称存储到它自己的名为"<name>_value" 的列中。例如:

  key    name    value
0   A  Patton        2
1   A  Arthur        2
2   B    Will        1
3   B  Patton        1

上面的数据框应该这样转换:

  key              name    Patton_value    Arthur_value    Will_value
0   A  [Patton, Arthur]               2               2          null
1   B    [Patton, Will]               1            null             1

到目前为止我尝试的是:

df.groupby('key').name.apply(list).reset_index()

但我不知道如何保留 "name" 的值并将它们保存为列。

【问题讨论】:

【参考方案1】:

您可以创建一个name_list 列并旋转数据框:

df['name_list'] = df['key'].map(df.groupby('key')['name'].agg(tuple)) 
out = df.pivot_table(values='value', index=['key','name_list'], columns='name').add_suffix('_value').reset_index().rename('name_list':'name', axis=1)
out['name'] = out['name'].apply(list)
out.columns.name = None

输出:

  key              name  Arthur_value  Patton_value  Will_value
0   A  [Patton, Arthur]           2.0           2.0         NaN
1   B    [Will, Patton]           NaN           1.0         1.0

【讨论】:

【参考方案2】:

可能有更简洁的方法来做到这一点,但这是可行的:

D = df.pivot(columns='name', index='key', values='value').reset_index().rename_axis(None, axis=1)
D['name'] = D.apply(lambda x: df['name'][df['key'] == x['key']].values, axis=1).reset_index(drop=True)
D = D[[D.columns[0], D.columns[-1], *D.columns[1:-1]]]
D.columns = [*D.columns[:2], *D.columns[2:] + '_value']

输出:

>>> D
  key              name  Arthur_value  Patton_value  Will_value
0   A  [Patton, Arthur]           2.0           2.0         NaN
1   B    [Will, Patton]           NaN           1.0         1.0

【讨论】:

以上是关于Pandas - 如何将属性保存到数组中并将它们的值保存到新列中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Matlab 中生成类的实例并将它们保存在数组中?

将 NSData 数组保存到 CoreData

如何将 imageData 保存到 NSManagedObject 属性

循环遍历excel文件做一些事情并将它们保存到新文件夹python pandas

如何按百分比将 CSV 数据集拆分为训练集和测试集,并将拆分后的数据集与 pandas 一起保存到本地文件夹中? [复制]

如何将数组中的非静态图像加载到 Swift 中的集合视图中