【问题标题】:Create multiple lists from pandas df with conditional logic [duplicate]使用条件逻辑从 pandas df 创建多个列表
【发布时间】: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())

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

【问题讨论】:

    标签: python python-3.x pandas loops


    【解决方案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() 对象
    • 感谢您更新您的答案,现在更清楚了,我很欣赏另一篇文章的链接,该链接概述了为什么我真正想要的东西最终可能会把我搞砸。
    猜你喜欢
    • 2020-06-24
    • 2016-02-14
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2018-05-05
    • 2016-12-29
    相关资源
    最近更新 更多