首页 > 解决方案 > 通过过滤另一列“日期”来计算列中的某些值

问题描述

我有

过程 助攻 日期
23d34 0,0 13.10.2020
23天4吨 1 2020 年 10 月 14 日
56z45 3 13.10.2020
2387e 0,0 17.10.2020
56z45 0,0,0 2020 年 10 月 14 日
3249u 0,0 15.10.2020
3209r 0,0 2020 年 10 月 27 日
n98b3 1,4 2020 年 10 月 14 日

我想计算从 2020 年 10 月 13 日到 2020 年 10 月 20 日“辅助”行中“0,0”的数量。我怎么做?使用

count = df.assisted_count[df.assisted_count.apply(lambda x : str(x).strip() == "0,0")].size

给了我 0,0 的总数,但我在某些时间段内需要它。希望可以有人帮帮我?

非常感谢 =)

标签: pythonpandasdataframejupyter-notebookdata-science

解决方案


让我们尝试转换to_datetime以使按日期过滤更容易。然后创建一个布尔系列,匹配开始和结束范围之间的日期,也匹配目标字符串'0,0'。如果只需要匹配计数,可以使用sum而不是过滤 DataFrame:

# Make Date column datetime
df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y')
# Filter Date between Start and End
date_m = df['Date'].between('2020-10-13', '2020-10-20')
# Check Where 'Assists' is '0,0'
zz_m = df['Assists'].str.strip().eq('0,0')
# Add up all the places where both conditions are true
count = (date_m & zz_m).sum()

计数 = 3。

df

  Process Assists       Date
0   23d34     0,0 2020-10-13  # Date column is now datetime
1   23d4t       1 2020-10-14
2   56z45       3 2020-10-13
3   2387e     0,0 2020-10-17
4   56z45   0,0,0 2020-10-14
5   3249u     0,0 2020-10-15
6   3209r     0,0 2020-10-27
7   n98b3     1,4 2020-10-14

也可以使用单独的Series而不是将 Date 列更新为 datetime:

# Make separate series from Date column
s = pd.to_datetime(df['Date'], format='%d.%m.%Y')
date_m = s.between('2020-10-13', '2020-10-20')
zz_m = df['Assists'].str.strip().eq('0,0')
count = (date_m & zz_m).sum()

计数 = 3。

df

  Process Assists        Date
0   23d34     0,0  13.10.2020  # Date col has not been modified
1   23d4t       1  14.10.2020
2   56z45       3  13.10.2020
3   2387e     0,0  17.10.2020
4   56z45   0,0,0  14.10.2020
5   3249u     0,0  15.10.2020
6   3209r     0,0  27.10.2020
7   n98b3     1,4  14.10.2020

推荐阅读