首页 > 解决方案 > 如何在熊猫数据框中创建自己的数据框条目列

问题描述

我想将数据框中的值转换为同一数据框中自己的列,以便每个名称条目只有一行(而不是同一条目出现在不同列条目的多行中)。下面是一个例子。

这是我拥有的数据框:

    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

NaNs 也可以是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'])

标签: pythonpandasdataframe

解决方案


利用 -

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参数替换NaN0s

由于@Toukenizegroupby在我可以将其发布为替代方案之前找到了解决方案,因此应归功于 -

df.groupby(['Name','Food']).sum().unstack()

推荐阅读