根据现有数据框中的值计算小于另一个数据框中的值
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_counts
和 map
返回您的数据框:
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
我有两个 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_counts
和 map
返回您的数据框:
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