python - Pandas:Groupby 数据框并创建缺少数据的字典

标签 python python-3.x pandas dataframe

下面是我的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
    ]
}

我的尝试:

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 获得上述结果,但不确定如何创建我预期的输出。

最佳答案

此处处理的 date 与其他值不同,因此首先使用 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]}]

关于python - Pandas:Groupby 数据框并创建缺少数据的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66688299/

相关文章:

python - 将字典转换为数据帧的一列,同时将字典行名称保留在另一列中(python)

python - 如何对pandas多索引中的列进行操作

python - 从具有 txt 中指定标签的字典构建数据框

python - 如何将 Gevents 与 Falcon 一起使用?

python - 按变量分组、排序和打印来自另一列的值

python - 在子类中覆盖时使用父属性 setter

python - 如何为 Pandas 中数据帧的给定列中的每个唯一组件创建一个新列?

json - Python json加载错误: JSONDecodeError: Expecting value

python - 在python中绘制热图

python - 错误是: PermissionError: [Errno 13] Permission denied: 'C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\IP.PY'