【问题标题】:Iterating over a Pandas grouped dataframe迭代 Pandas 分组数据框
【发布时间】:2017-01-04 23:04:01
【问题描述】:

我在pandas 中使用groupby 来创建一些json 样式数据。我无法遍历分组的 dataframe,因为它无法识别我的密钥

import pandas as pd


df = pd.DataFrame(data=[['Group A', 10],
                       ['Group A', 12],
                       ['Group B', 22],
                       ['Group B', 25],
                       ['Group B', 26]],
                  columns = ['Group', 'Value'])

df = df.groupby('Group').agg(['mean', 'count']).reset_index()

json_data = [{'id': row['Group'],
              'name': row['Group'],
              'value': row['mean']} for index, row in df.iteritems()]
print json_data

错误:

KeyError: 'Group'

期望的输出:

[{
    'id': 'Group A',
    'name': 'Group A',
    'value': 11
}, {
    'id': 'Group B',
    'name': 'Group B',
    'value': 24.33333
    }]

【问题讨论】:

    标签: python json python-2.7 pandas


    【解决方案1】:

    作为documentediteritems 迭代列(特别是名称/列对)。看起来你想要iterrows。 (您仍然需要将其更改为访问 ['Value', 'mean'] 而不是 ['mean'],因为您创建了一个包含多索引列的 DataFrame。)

    【讨论】:

    • 谢谢,我不知道如何引用'mean'。意思是['Value', 'mean'],但是Group列没有标签,怎么引用的?
    • @user2242044:“没有标签”是什么意思? “组”列可以直接使用 ["Group"] 访问,因为它没有额外的索引级别。
    • @BrenBam,使用row['Group'] 似乎正在添加整个数据框` Group A Name: 0, dtype: object,`
    • @user2242044:啊,你说得对。你必须做row['Group', '']
    【解决方案2】:

    试试这个:这是DataFrame.to_json()的链接

    df = df.groupby('Group').mean().reset_index().rename(columns = {'Group':"id" })
    df['name'] = df['id']
    df.to_json(orient="records")
    
    '[{"id":"Group A","Value":11.0,"name":"Group A"},{"id":"Group B","Value":24.3333333333,"name":"Group B"}]'
    

    您可以通过这种方式重新排序 JSON 输出:

    df[['id','name', 'Value', ]].to_json(orient="records")
    
    '[{"id":"Group A","name":"Group A","Value":11.0},{"id":"Group B","name":"Group B","Value":24.3333333333}]'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-14
      • 2020-07-09
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-14
      • 2020-10-05
      相关资源
      最近更新 更多