【问题标题】:Count values less than in another dataframe based on values in existing dataframe根据现有数据框中的值计算小于另一个数据框中的值
【发布时间】:2021-02-04 03:19:14
【问题描述】:

我有两个 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   |
+---------+------+-------+

感谢任何评论和反馈,在此先感谢

【问题讨论】:

  • 我认为那些代码没有考虑日期限制
  • “B”的 1 来自哪里?
  • 我的错误先生,我改了,谢谢你让我开心

标签: pandas dataframe map-function


【解决方案1】:

让我们 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多