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

Posted

技术标签:

【中文标题】使用条件逻辑从 pandas df 创建多个列表【英文标题】:Create multiple lists from pandas df with conditional logic [duplicate] 【发布时间】:2020-06-23 20:55:27 【问题描述】:

我有一个看起来像这样的 df:

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

目前我正在尝试制定一个循环来执行此操作,例如:

for i in range(df.var2.max()):
    var2_i = (x for x in df.var1.to_list())

虽然列表似乎不是在这里迭代创建的。也许有更好的方法来实现我的目标?

【问题讨论】:

【参考方案1】:

使用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 而不是“独立灯” - 键是 list_0, @ 987654334@等...

示例

d = df.groupby('var1')['var2'].agg(list).add_prefix('list_').to_dict()

print(d['list_0'])

[出]

['a', 'b', 'c', 'd', 'z']

如果你绝对坚持独立列表,那么使用globals() 对象,并使用for 循环进行更新(为避免疑问,我不推荐这种方法 - 查看this question更多信息)

s = df.groupby('var1')['var2'].agg(list).add_prefix('list_')

for var, lst in s.iteritems():
    globals()[var] = lst

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

【讨论】:

所以,df.groupby 返回一个 groupby 对象,而不是独立列表。 @LMGagne 查看更新的最后部分 - 使用 globals() 对象 感谢您更新您的答案,现在更清楚了,我很欣赏另一篇文章的链接,该链接概述了为什么我真正想要的东西最终可能会把我搞砸。

以上是关于使用条件逻辑从 pandas df 创建多个列表的主要内容,如果未能解决你的问题,请参考以下文章

当条件为真时,Pandas将数据帧分成多个

Pandas中的五种数据查询方法--数值,列表,区间,条件,函数查询

Pandas:groupby A 列并从其他列创建元组列表?

过滤条件 pandas df 包含一个列表

根据 Pandas DF 中每行的条件获取列标题列表

如何根据多个条件将 1 个 pandas 数据帧合并或组合到另一个数据帧