python - 如何在熊猫数据框中创建自己的数据框条目列
问题描述
我想将数据框中的值转换为同一数据框中自己的列,以便每个名称条目只有一行(而不是同一条目出现在不同列条目的多行中)。下面是一个例子。
这是我拥有的数据框:
Name Food Grams
0 Tammy Fish 200
1 Tammy Rice 105
2 Wenny Rice 250
3 Wenny Eggs 100
4 Wenny Eggs 90
5 Steve Plums 10
6 Steve Eggs 90
(数据框代码如下)
我想将其转换为以下内容:
Name Fish Rice Eggs Plums
0 Tammy 200 105 NaN NaN
1 Wenny NaN 250 190 NaN
2 Steve NaN NaN 90 10
(NaN
s 也可以是0
,两者都可以)。
请注意,在同一个人在不同场合吃相同食物的情况下,消耗的食物克数会在同一列中相加(例如,Wenny 和鸡蛋)。
代码df
:
data = {'Name': ['Tammy', 'Tammy', 'Wenny', 'Wenny', 'Wenny',
'Steve', 'Steve'],
'Food': ['Fish', 'Rice', 'Rice', 'Eggs',
'Eggs', 'Plums', 'Eggs'],
'Grams': [200, 105, 250, 100, 90, 10, 90]}
df = pd.DataFrame(data, columns = ['Name', 'Food', 'Grams'])
解决方案
利用 -
df.pivot_table(index=['Name'], columns=['Food'], values=['Grams'],
fill_value=0, aggfunc='sum')
输出
Grams
Food Eggs Fish Plums Rice
Name
Steve 90 0 10 0
Tammy 0 200 0 105
Wenny 190 0 0 250
使用fill_value
参数替换NaN
为0
s
由于@Toukenizegroupby
在我可以将其发布为替代方案之前找到了解决方案,因此应归功于 -
df.groupby(['Name','Food']).sum().unstack()
推荐阅读
- c# - 如何以编程方式找到 Nuget 恢复的 DLL?
- firebase - 反应原生云功能日志为空
- c++ - C++ - 如何使用 shared_ptr 替换 T**
- java - 无法解析方法 append(int)
- pyspark - Pyspark / pyspark 内核在 jupyter notebook 中不起作用
- r - R TIME 超过 24 小时
- python - TypeError: += 不支持的操作数类型: 'int' 和 'tuple' 错误
- javascript - 单击基于jquery div中的链接时动态更改文本框值
- java - 具有两种参数类型的 Scala 向左折叠
- angular - Cascaded Angular Material Design 示例(带有反应形式)