根据现有数据框中的值计算小于另一个数据框中的值

Count values less than in another dataframe based on values in existing dataframe

我有两个 python pandas 数据框,它们的简化形式如下所示:

DF1

+---------+------+
| Date 1  | Item |
+---------+------+
| 1991-08 |   A  |
| 1992-08 |   A  |
| 1997-02 |   B  |
| 1998-03 |   C  |
| 1999-02 |   D  | 
| 1999-02 |   D  |
+---------|------+

DF2

+---------+------+
| Date 2  | Item | 
+---------+------+
| 1993-08 |   A  | 
| 1993-09 |   B  | 
| 1997-01 |   C  |
| 1999-03 |   D  | 
| 2000-02 |   E  | 
| 2001-03 |   F  |
+---------|------+

如果 DF1 中的日期小于 DF2 中的日期,我想统计 DF2 项目列中有多少元素出现在 DF1 中

期望的输出

+---------+------+-------+
| Date 2  | Item | Count |
+---------+------+-------+
| 1993-08 |   A  |   2   |
| 1993-09 |   B  |   0   |
| 1997-01 |   C  |   0   |
| 1999-03 |   D  |   2   |
| 2000-02 |   E  |   0   |
| 2001-03 |   F  |   0   |
+---------+------+-------+

感谢任何评论和反馈,提前致谢

让我们 merge 使用笛卡尔连接和过滤器,然后使用 value_countsmap 返回您的数据框:

df_c = df1.merge(df2, on='Item')
df_c = df_c[df_c['Date 1'] < df_c['Date 2']]
df2['Count'] = df2['Item'].map(df_c['Item'].value_counts()).fillna(0)
print(df2)

输出:

    Date 2 Item  Count
0  1993-08    A    2.0
1  1993-09    B    0.0 # Note, I get no counts for B
2  1997-01    C    0.0
3  1999-03    D    2.0
4  2000-02    E    0.0
5  2001-03    F    0.0