开发者社区> 问答> 正文

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

我有一个看起来像这样的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

我试图创建与var1中给定值相对应的var2中每个值集的列表。因此,我的输出将如下所示:

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())

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

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 00:11:53 615 0
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
    

    * 更新资料

    我想我明白了您要达到的目标,我的强力建议是使用pythondict而不是“ independent lits”-键为list_0list_1等。

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

    [出]

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

    如果您绝对坚持使用独立列表,则使用globals()对象,并使用for循环进行更新(为避免疑问,我不建议使用此方法-请查看此问题以获取更多信息):

    s = df.groupby('var1')['var2'].agg(list).add_prefix('list_')
    
    for var, lst in s.iteritems():
        globals()[var] = lst
    

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

    回答来源:stackoverflow

    2020-03-24 00:12:00
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
中文:即学即用的Pandas入门与时间序列分析 立即下载
即学即用的Pandas入门与时间序列分析 立即下载
demystifying dataframe and dataset 立即下载