【问题标题】:creating groupby function from dataframe pandas从数据框 pandas 创建 groupby 函数
【发布时间】:2020-12-21 04:46:58
【问题描述】:

我的模拟数据框由这两列(字符和值)组成,我想创建一个函数,根据其唯一值迭代列“字符”,然后获取与其关联的所有值。请多多指教。

预期结果:

temp = ({a:[100,400], b:[200,200], c:[200,200]})
df
characters values
  a         100
  b         200
  a         400
  b         200
  c         200
  c         200

我知道我必须创建一个空列表,然后迭代“字符”列并将值附加到列表中。这是我的粗略想法(不完整)

def groups_per_character(df):
    temp = {}
    for characters,values in df.values():
        for character in characters:
            if character not in temp:
                temp[character]=[]
            temp[character].append(values)
        return temp

所以基本上我试图做一个比类似但不一样的功能

df.groupby("characters").min()

运行函数时发生错误 'numpy.ndarray' 对象不可调用

【问题讨论】:

    标签: python pandas list dataframe dictionary


    【解决方案1】:

    您不需要创建单独的函数。

    只需将Groupby.aggdf.to_dict() 一起使用:

    In [1687]: x = df.groupby('characters').agg(list).to_dict()
    
    In [1688]: temp = x['values']
    
    In [1689]: temp
    Out[1689]: {'a': [100, 400], 'b': [200, 200], 'c': [200, 200]}
    

    【讨论】:

    • @aimankhalid 如果答案有帮助,请考虑投票并接受答案。
    【解决方案2】:

    由于只是迭代,没有计算,可以使用defaultdict

    from collections import defaultdict
    
    d = defaultdict(list)
    for k, v in zip(df.characters, df["values"]):
        d[k].append(v)
    
    d
    defaultdict(list, {'a': [100, 400], 'b': [200, 200], 'c': [200, 200]})
    

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 2018-11-13
      相关资源
      最近更新 更多