Pandas:按数据框进行分组并创建带有缺失数据的字典

3
以下是我的df:
   In [78]: df
Out[78]: 
   site        date     race  count
0     1  1999-01-31    Asian    100
1     1  1999-01-31  African     25
2     2  1999-01-31    Asian    200
3     1  2001-01-21    Asian     95
4     2  2001-01-21    Asian    130
5     1  2003-01-12    Asian     80
6     2  2003-01-12  Mexican     35

我希望能够按照racedate进行分组,并创建以下输出结果:

期望输出结果:

{
    "dates":[
    "1999-01-31",
    "2001-01-21",
    "2003-01-12"
    ]
},
{
    "race": "Asian"
    "data": [
    300,
    225,
    80
    ]
},
{
    "race": "African"
    "data": [
    25,
    0,
    0
    ]
},
{
    "race": "Mexican"
    "data": [
    0,
    0,
    35
    ]
}

My attempt:

In [77]: df.groupby(['race', 'date'])['count'].sum().reset_index(level=1)
Out[77]: 
               date  count
race                      
African  1999-01-31     25
Asian    1999-01-31    300
Asian    2001-01-21    225
Asian    2003-01-12     80
Mexican  2003-01-12     35

我可以使用groupby来得到上面的结果,但不确定如何创建我期望的输出。
1个回答

2

在处理数据时,日期与其他值不同,因此首先使用DataFrame.pivot_table进行旋转,然后使用自定义格式的列表推导式:

df = df.pivot_table(index='date',columns='race',values='count',fill_value=0, aggfunc='sum')

L = [{"dates": list(df.index)}] + [dict(race=k, data=list(v)) for k, v in df.items()]
print (L)
[{'dates': ['1999-01-31', '2001-01-21', '2003-01-12']}, 
 {'race': 'African', 'data': [25, 0, 0]}, 
 {'race': 'Asian', 'data': [300, 225, 80]},
 {'race': 'Mexican', 'data': [0, 0, 35]}]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接