【发布时间】:2020-06-12 22:02:11
【问题描述】:
我在数据框df1 的一列中有一个列表,我想检查每一行是否该列表的所有元素都在第二个数据框df2 中的另一列中。
这两个数据框是这样的:
df1 df2
id | members | num | available |
1 |['a',b'] | one | ['a','b','c','d','e']|
2 |['b'] | two | ['a','b'] |
3 |['a','b','c'] | three| ['b','d','e'] |
我正在尝试提出一种方法,该方法可以为我提供df2 中的哪些行对于df1 中的每一行具有members 的所有元素。也许会产生这样的结果:
id | members | which_cols |
1 |['a',b'] | ['one','two'] |
2 |['b'] | ['one','two','three'] |
3 |['a','b','c'] | ['one'] |
我认为将其转换为 {k: list(v) for k,v in df1.groupby("id")["members"]} 和 {i: list(j) for i,j in df2.groupby("num")["available"]} 之类的字典可能会使它更灵活地实现所需的输出,但仍然没有找到一种方法来获得我正在寻找的东西。
df2 将有大约300 行,长度为available 与25,000 一样大。而df1 可以和1M 一样大,列表长度在members 最多15 行。所以我认为效率也很重要。
【问题讨论】:
-
c没有出现在two中? -
刚刚添加了一些关于数据的更多信息。
-
有趣的是,您的
members比available丰富得多。您可以过滤掉所有长度超过15的members列表,因为它们不适合任何available。 -
那是我的另一个错误。情况恰恰相反。
available就像一个主列表,members是子集,但它们并非全部在df2的所有行中
标签: python pandas list dataframe dictionary