我有一个如下所示的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对象,然后我需要将其进一步分解成单独的列表,并且不能以我想要的方式运行。
答案 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))