【问题标题】:Create multiple lists from pandas df with conditionals [duplicate]从带有条件的pandas df创建多个列表[重复]
【发布时间】:2020-06-24 14:59:48
【问题描述】:

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

我想要的行为是我能够执行print(list_0) 并返回与var1 == 0 关联的var2 的值。

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

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

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

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

【问题讨论】:

  • 你昨天问过同样的问题吗?
  • @QuangHoang 唯一的答案没有解决我对单独列表的需求,并且问题已通过反馈关闭,如果我对答案不满意,请再次询问。我不满意,所以在这里我再次询问更多细节/更新。
  • separate list 是什么意思?您不想坐下来标记 60 个单独的列表变量吗?
  • 我绝对不想手动标记它们,因此我尝试使用list['list_'+str(i)] = []自动标记
  • 查看 Chris 对另一个问题的更新。我会认为这是另一个的副本。

标签: python python-3.x pandas loops


【解决方案1】:

像下面这样的东西会起作用吗?

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

【讨论】:

  • 试试res = [] for val in df["var1"].values: filtered_df = df.iloc[df["var1"] == val] res.append((val, filtered_df.values))
【解决方案2】:

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

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

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

print(all_lists['list_0'])

一些补充说明: 您最终会得到一个包含数据框中所有可能列表的字典。作为参考,我将循环放在字典括号内的这种技术称为字典理解。

【讨论】:

  • 那么这是否会生成一个字典,您可以在其中切换 var1 以检索所述列表?
  • 正确。对于您可以在 var1 列中找到的每个唯一值,都会有一个对应列表的键。
猜你喜欢
  • 2020-06-23
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 2021-01-04
  • 2017-10-07
  • 2022-01-22
  • 2020-03-25
相关资源
最近更新 更多