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 - 如何将属性保存到数组中并将它们的值保存到新列中的主要内容,如果未能解决你的问题,请参考以下文章
如何将 imageData 保存到 NSManagedObject 属性
循环遍历excel文件做一些事情并将它们保存到新文件夹python pandas
如何按百分比将 CSV 数据集拆分为训练集和测试集,并将拆分后的数据集与 pandas 一起保存到本地文件夹中? [复制]