我有模拟数据框由这 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' 对象不可调用
答案 0 :(得分:3)
您不需要创建单独的函数。
只需将 Groupby.agg
与 df.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]})