【问题标题】:Grouping a 3 column dataframe by values of a particular column to create list of dictionaries按特定列的值对 3 列数据框进行分组以创建字典列表
【发布时间】:2020-12-07 01:50:59
【问题描述】:

我对 Python Pandas 非常陌生,对使用 Pandas Dataframe groupby 和过滤器有疑问。

这是我的示例数据框:

data = {
    'A': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'],
    'B': ['B1', 'B2', 'B3', 'B3', 'B4', 'B5'],
    'C': ['C1', 'C1', 'C2', 'C2', 'C3', 'C3']
}
df = pd.DataFrame(data)

我想按“C”列的值进行分组,并过滤​​“B”列下具有不同值集的组,以创建以下字典列表:

[{"C1": [{"A1":"B1"}, {"A2": "B2"}]}, {"C3": [{"A5":"B4"}, {"A6":"B5"}]}]

有人可以帮助我如何使用 Pandas 做到这一点吗?谢谢!

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    让我们定义一个函数dictify,它将C列上的数据框分组,并为在B列中具有不同值集的组生成指定格式的字典:

    def dictify():
        for k, g in df.groupby('C'):
            if g['B'].nunique() > 1:
                yield {k: [{x: y} for x, y in zip(g['A'], g['B'])]}
    
    list(dictify())
    

    结果:

    [{'C1': [{'A1': 'B1'}, {'A2': 'B2'}]}, {'C3': [{'A5': 'B4'}, {'A6': 'B5'}]}]
    

    【讨论】:

      【解决方案2】:
      data = {
          'A': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'],
          'B': ['B1', 'B2', 'B3', 'B3', 'B4', 'B5'],
          'C': ['C1', 'C1', 'C2', 'C2', 'C3', 'C3']
      }
      df = pd.DataFrame(data)
      
      df = df.drop_duplicates(subset=['B','C'], keep=False)
      [df.groupby("C").apply(lambda x: [dict([i]) for i in x[['A','B']].values]).to_dict()]
      

      输出

      [{'C1': [{'A1': 'B1'}, {'A2': 'B2'}], 'C3': [{'A5': 'B4'}, {'A6': 'B5'}]}]
      

      【讨论】:

        【解决方案3】:

        要生成结果,请运行:

        result = [ {key: [ {row.A : row.B} for row in grp.itertuples() ]}
            for key, grp in df.groupby('C') if grp.B.unique().size > 1 ]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-11
          • 2021-06-26
          • 1970-01-01
          • 1970-01-01
          • 2020-03-07
          • 2021-10-27
          相关资源
          最近更新 更多