使用条件从熊猫df创建多个列表

时间:2020-03-12 14:26:29

标签: python python-3.x pandas loops

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

我所希望的行为是,我将能够执行print(list_0)并返回与var2关联的var1 == 0的值。

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

for i in range(df['var1'].max()):
    list['list_'+str(i)] = []
    stops_i.append(x for x in df['var2'])

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

我也尝试过按照另一篇SO文章中的建议使用groupby,尽管它返回一个groupby对象,然后我需要将其进一步分解成单独的列表,并且不能以我想要的方式运行。

2 个答案:

答案 0 :(得分:2)

因此,在选择要查看的列表方面,您不会得到想要的行为。您实际上不能像这样动态地实例化变量的名称,但是我们可以用字典来做几乎相同的事情。

all_lists = {"list_"+str(i): df["var2"].loc[df["var1"]==i].tolist() for i in df["var1"].unique()}

然后,您可以通过以下方式访问每个列表:

print(all_lists['list_0'])

一些其他说明: 您最终得到了数据框中所有可能列表的字典。作为参考,这种将循环放在字典括号内的技术称为“字典理解”。

答案 1 :(得分:0)

下面的东西会起作用吗?

res = [] 
for val in df["var1"].values: 
    filtered_df = df.iloc[df["var1"] == val] 
    res.append((val, filtered_df.values))