如何计算一个df列的时间值是另一个df.column的一部分?

时间:2019-01-29 13:51:53

标签: python pandas

我必须使用不同的数据框,两者都包含一列对象类型。两列都存在值的组合。我想知道第二个数据帧中的组合在第一个数据帧中的组合出现的频率。

我尝试了以下各种变化:

df1.Column1.str.count(df2['Column2'])

但我不断收到错误消息:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

df1 = 
Index                         Column1 
0                             BIER, VRUCHTENSAP, SMOOTHIE
1                                       FRISDRANK, KOFFIE
2                                           KOFFIE, WATER
3                                            KOFFIE, THEE
4                                       FRISDRANK, KOFFIE
5                                   HOT CHOCOLATE, KOFFIE
6                                            KOFFIE, THEE
7                                       FRISDRANK, KOFFIE
8                                         BIER, FRISDRANK
9                                       FRISDRANK, KOFFIE
10                                 BIER, MIX DRINKS, THEE
11                                           KOFFIE, THEE

df2 = 
Index                         Column2
1                    KOFFIE, SPECIAAL BIER
2                             KOFFIE, THEE
3                            KOFFIE, WATER

预期结果是一个数据帧,其中显示了df2中值的计数以及它们在df1中出现的时间:

Index                         Count
KOFFIE, SPECIAAL BIER         0
KOFFIE, THEE                  3 
KOFFIE, WATER                 1

我希望有人能帮助我。

2 个答案:

答案 0 :(得分:2)

如果您要查找完全匹配项,则可以使用以下列表理解,使用pd.Series.eq计算完全匹配项的数量:

counts = [df1.Column1.eq(i).sum() for i in df2.Column2]
pd.DataFrame({'Count':counts}, df2.Column2)

                        Count
Column2                   
KOFFIE, SPECIAAL BIER      0
KOFFIE, THEE               3
KOFFIE, WATERE             1

答案 1 :(得分:0)

.value_counts + .reindex适用于完全匹配。

df1.Column1.value_counts().reindex(df2.Column2).fillna(0).astype(int)

Column2
KOFFIE, SPECIAAL BIER    0
KOFFIE, THEE             3
KOFFIE, WATER            1
Name: Column1, dtype: int32