使用条件逻辑从pandas df创建多个列表

时间:2020-03-11 19:39:39

标签: python python-3.x pandas loops

我有一个如下所示的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

尽管似乎不是在此处迭代创建列表。也许有更好的方法可以实现我的目标?

1 个答案:

答案 0 :(得分:4)

使用groupbyjoin聚合,并使用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

您现在应该具有带有关联变量名称的独立列表。