使用条件逻辑从 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】:使用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
而不是“独立灯” - 键是 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中的五种数据查询方法--数值,列表,区间,条件,函数查询