我有一个如下所示的df:
from typing import Callable
@dataclass
class Holder:
func: Callable[[int], int]
我正在尝试创建var1 var2 var3
0 a 1
0 b 7
0 c 5
0 d 4
0 z 8
1 t 9
1 a 2
2 p 3
.. .. ..
60 c 3
中与var2
中给定值相对应的每组值的列表。因此,我的输出将如下所示:
var1
目前,我正在尝试制定循环执行此操作,例如:
list_0: a, b, c, d, z
list_1: t, a
list_2: p
list_60: c
尽管似乎不是在此处迭代创建列表。也许有更好的方法可以实现我的目标?
答案 0 :(得分:4)
使用groupby
和join
聚合,并使用add_prefix
重命名索引:
df.groupby('var1')['var2'].agg(', '.join).add_prefix('list_')
[出]
var1
list_0 a, b, c, d, z
list_1 t, a
list_2 p
list_60 c
Name: var2, dtype: object
或对于python列表,请使用list
聚合:
df.groupby('var1')['var2'].agg(list).add_prefix('list_')
[出]
var1
list_0 [a, b, c, d, z]
list_1 [t, a]
list_2 [p]
list_60 [c]
Name: var2, dtype: object
我想我明白了您要实现的目标,我的 strong 建议是使用python dict
而不是“ independent lits”-键为{{1 }},list_0
等
示例
list_1
[出]
d = df.groupby('var1')['var2'].agg(list).add_prefix('list_').to_dict()
print(d['list_0'])
如果您绝对坚持使用独立列表,请使用['a', 'b', 'c', 'd', 'z']
对象,并使用globals()
循环更新(为避免疑问,我不建议您使用此方法-签出this question了解更多信息):
for
您现在应该具有带有关联变量名称的独立列表。