【发布时间】:2018-11-20 23:03:46
【问题描述】:
我已经为此苦苦挣扎了几天。我在网上阅读了很多,发现了一些类似的问题,例如:Pandas counting occurrence of list contained in column of lists 或 pandas: count string criteria across down rows 但在这种情况下都不能完全工作。
我有两个数据框:df1 由一列字符串组成。 df2 由一列列表组成(这些列表是 df1 中字符串的组合,一个列表中的每个元素都是唯一的)。
我想知道每个字符串组合中有多少个 df2 列表。那么,有多少列表有“a”和“b”作为元素?有多少列表以“a”和“c”作为元素等等。
这是 df1 的样子(简化):
df1 = pd.DataFrame({"subject": ["a", "b", "c"]})
df1
subject
0 a
1 b
3 c
这就是 df2 的样子(简化)。
df2 = pd.DataFrame({"subject_list": [["a", "b" ,"c"], ["b", "c"], ["a", "b"], ["b", "c"], ["c"]]})
df2
subject_list
0 ["a", "b" ,"c"]
1 ["a", "b"]
2 ["b", "c"]
3 ["c"]
4 ["b", "c"]
我有两个代码都可以工作但不太正确:
此代码在 df1 中查找两行的组合(根据需要)。但是,df1 比 df2 包含更多的行,因此它在 df2 的最后一行停止。但仍有一些“字符串组合”需要测试。
df1["combination_0"] = df2["subject_list"].apply(lambda x: x.count(x and df.subject[0]))
此代码计算一个“列表”的出现次数。但是,我不知道如何更改它,以便它为每个值组合执行此操作。
df1["list_a_b"] = df2["subject_list"].apply(lambda x: x.count(df1.subject[0] and df1.subject[1]))
df1.list_a_b.sum()
【问题讨论】:
-
您的预期输出是什么?您能否在您的问题中包含
df和df2的输出(为了便于阅读)? -
您的示例中有一些错误。请尝试运行您提供的示例代码。第一行应该是
df1 = pd.DataFrame({"subject": ["a", "b", "c"]}),但其他行也有问题。 -
这个问题是正确的,因为很高兴看到您尝试过的一些事情,但我不确定您在寻找什么,并且您的样本中有简单的错误。
-
首先抱歉设计和编码混乱!
标签: python list pandas lambda count