从数据框熊猫创建 groupby 函数

时间:2020-12-21 04:46:58

标签: python pandas list dataframe dictionary

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

预期结果:

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' 对象不可调用

2 个答案:

答案 0 :(得分:3)

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

只需将 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]}

答案 1 :(得分:0)

由于只是迭代,没有计算,可以使用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]})