根据ID和列表返回值的计数

时间:2019-01-24 20:49:51

标签: python-3.x pandas

我有三个数据框。 df1用于总结基于df2df3的信息,如下所示:

对于ID中的每个df2,我想计算它从Value中有df3的次数,并在Result列中返回计数的df1

df1

ID  Result
1   2
2   2
3   2
4   1
6   2
8   0
10  1

df2

ID  Value
1   A
1   A
1   F
2   B
2   C
3   D
3   D
4   C
5   A
6   A
6   B
7   C
7   D
8   E
8   F
8   G
9   A
9   B
9   C
10  D

df3

ValueList
A
B
C
D 

我尝试使用df3基于isin来过滤行,但这仅返回了一些行,而某些行的值不在df3

df = df2[df2['Value'].isin(df3['Value'])].drop(['Value'], axis = 1)

1 个答案:

答案 0 :(得分:1)

也许更简单的方法是总结按ID分组的布尔isin系列:

In [11]: df2['Value'].isin(df3['ValueList']).groupby(df2["ID"]).sum()
Out[11]:
ID
1     2.0
2     2.0
3     2.0
4     1.0
5     1.0
6     2.0
7     2.0
8     0.0
9     3.0
10    1.0
Name: Value, dtype: float64

注意:您可以使用.sum(type='int64')来确保它是ind dtype。