如何根据 pandas 数据框中的日期条件添加具有值的列?
How to add a column with value based on date condition in pandas dataframe?
我有一个包含以下示例列的数据框。
我在日期列中有每日数据。
我想根据日期添加一个具有特定值的列。
如果日期在 29 之前,那么它应该在新的日期范围列中包含 12/29 之前的值,在 30 之后意味着它应该在 12/30 之后包含,与其他日期相同。
Date product result
12/27/2021 tv 6
12/27/2021 tv 38
12/27/2021 tv 2
12/28/2021 broadband 5
12/29/2021 tv 6
12/30/2021 broadband 7
12/30/2021 tv 10
12/31/2021 broadband 48
01/06/2022 broadband 48
Expected output
Date day_range product result
12/27/2021 before 12/29 tv 6
12/27/2021 before 12/29 tv 38
12/27/2021 before 12/29 tv 2
12/28/2021 before 12/29 broadband 5
12/29/2021 29-Dec tv 6
12/30/2021 30-Dec broadband 7
12/30/2021 30-Dec tv 10
12/31/2021 After 12/30 broadband 48
01/06/2022 After 12/30 broadband 4
有没有办法实现这个
使用numpy.select
:
df['Date'] = pd.to_datetime(df['Date'])
df['day_range'] = np.select([df['Date'].lt('2021-12-29'),
df['Date'].gt('2021-12-30')],
['before 12/29','After 12/30'],
default=df['Date'].dt.strftime('%d-%b'))
print (df)
Date product result day_range
0 2021-12-27 tv 6 before 12/29
1 2021-12-27 tv 38 before 12/29
2 2021-12-27 tv 2 before 12/29
3 2021-12-28 broadband 5 before 12/29
4 2021-12-29 tv 6 29-Dec
5 2021-12-30 broadband 7 30-Dec
6 2021-12-30 tv 10 30-Dec
7 2021-12-31 broadband 48 After 12/30
8 2022-01-06 broadband 48 After 12/30
我有一个包含以下示例列的数据框。
我在日期列中有每日数据。 我想根据日期添加一个具有特定值的列。
如果日期在 29 之前,那么它应该在新的日期范围列中包含 12/29 之前的值,在 30 之后意味着它应该在 12/30 之后包含,与其他日期相同。
Date product result
12/27/2021 tv 6
12/27/2021 tv 38
12/27/2021 tv 2
12/28/2021 broadband 5
12/29/2021 tv 6
12/30/2021 broadband 7
12/30/2021 tv 10
12/31/2021 broadband 48
01/06/2022 broadband 48
Expected output
Date day_range product result
12/27/2021 before 12/29 tv 6
12/27/2021 before 12/29 tv 38
12/27/2021 before 12/29 tv 2
12/28/2021 before 12/29 broadband 5
12/29/2021 29-Dec tv 6
12/30/2021 30-Dec broadband 7
12/30/2021 30-Dec tv 10
12/31/2021 After 12/30 broadband 48
01/06/2022 After 12/30 broadband 4
有没有办法实现这个
使用numpy.select
:
df['Date'] = pd.to_datetime(df['Date'])
df['day_range'] = np.select([df['Date'].lt('2021-12-29'),
df['Date'].gt('2021-12-30')],
['before 12/29','After 12/30'],
default=df['Date'].dt.strftime('%d-%b'))
print (df)
Date product result day_range
0 2021-12-27 tv 6 before 12/29
1 2021-12-27 tv 38 before 12/29
2 2021-12-27 tv 2 before 12/29
3 2021-12-28 broadband 5 before 12/29
4 2021-12-29 tv 6 29-Dec
5 2021-12-30 broadband 7 30-Dec
6 2021-12-30 tv 10 30-Dec
7 2021-12-31 broadband 48 After 12/30
8 2022-01-06 broadband 48 After 12/30