【问题标题】:Dictionary Creation from DataFrame, Pandas, Python从 DataFrame、Pandas、Python 创建字典
【发布时间】:2015-10-29 03:07:05
【问题描述】:

我想创建一个字典,其中键是状态名称,值是与状态对应的所有计数的总和。

数据帧示例

State         Count
California    100
Colorado      100
California    54
Colorado      9254

我正在尝试使用以下内容,但不确定如何在其中包含 sum 函数,也不确定我是否应该在这里使用 zip 方法:

df_dict = dict(zip(df.State, df.Count))
print df_dict

【问题讨论】:

    标签: python dictionary pandas


    【解决方案1】:

    在数据框中按组计算总和,然后选择'Count' 列并使用to_dict() 将结果系列转换为字典:

    df_dict = df.groupby('State').agg('sum')['Count'].to_dict()
    print df_dict
    

    如果您在 df 中的列比您可能想要做的那两个多

    df[['State','Count']].groupby('State').agg('sum')['Count'].to_dict()
    

    避免计算所有列的总和。

    编辑:

    正如 EdChum 建议的那样,.agg('sum') 可以缩短为 .sum(),这会给你同样的结果。

    【讨论】:

    • 完美,不确定是否需要 ['Count']。除非我错过了什么? @Pekka
    • 需要从生成的 DataFrame 中选择第一列(仅在这种情况下)。不带它试试。你会得到一个嵌套字典。在这种情况下,您想要的结果在 Count 键中。
    • 所以当我们使用 ['Count'] 选择时,我们得到的是 Series 而不是 DataFrame。然后我们将 Series(不是 DataFrame)转换为字典。请注意,DataFrames 也可以使用to_dict() 转换为字典,但结果不同(嵌套字典)。请参阅:pandas.pydata.org/pandas-docs/stable/generated/…pandas.pydata.org/pandas-docs/stable/generated/…
    • 我认为这里不需要agg
    【解决方案2】:

    这将无法正常工作,因为 dict 构造函数将替换每个 state 的值,而不是求和。它不是单行的,而是:

    from collections import Counter
    
    df_dict = Counter()
    for state, count in zip(df.State, df.Count):
        df_dict[state] += count
    

    将为您提供总计数,Counter 类具有一些可能对计数字典有用的额外功能。

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2021-06-20
      • 2019-06-13
      • 2019-07-26
      • 2017-10-03
      相关资源
      最近更新 更多