[英]pandas using list comprehension to create new column
我有如下日期范围和数据框列表: [('2019-01-01', '2019-01-04'), ('2019-12-25', '2019-12-28'), (' 2019-18-29', '2019-12-21'),]
+------------+---+------+
| date | id| |
+------------+---+------+
| 2018-01-04 | 1 | |
| 2018-01-02 | 1 | |
| 2018-01-01 | 1 | |
| 2017-12-28 | 1 | |
| 2017-12-27 | 1 | |
| 2017-12-26 | 1 | |
| 2017-12-25 | 1 | |
| 2017-12-21 | 1 | |
| 2017-12-20 | 1 | |
| 2017-12-18 | 1 | |
+------------+---+------+
预期输出:
+------------+---+------+-------+
| date |id | group| |
+------------+---+------+-------+
| 2018-01-04 | 1 | 1 | |
| 2018-01-02 | 1 | 1 | |
| 2018-01-01 | 1 | 1 | |
| 2017-12-28 | 1 | 2 | |
| 2017-12-27 | 1 | 2 | |
| 2017-12-26 | 1 | 2 | |
| 2017-12-25 | 1 | 2 | |
| 2017-12-21 | 1 | 3 | |
| 2017-12-20 | 1 | 3 | |
| 2017-12-18 | 1 | 3 | |
+------------+---+------+-------+
我尝试使用列表理解来分配 1 if date <= "2019-01-04" & date >="2019-01-01" 等等,但它不起作用。 任何人都可以帮助我吗?
这应该这样做:
import pandas as pd
df['date'] = pd.to_datetime(df['date'])
def f(x):
if (x <= pd.Timestamp('2018-01-04')) & (x >= pd.Timestamp('2018-01-01')):
return(1)
elif (x <= pd.Timestamp('2017-12-28')) & (x >= pd.Timestamp('2017-12-25')):
return(2)
elif (x <= pd.Timestamp('2017-12-20')) & (x >= pd.Timestamp('2017-12-18')):
return(3)
df['group'] = df['date'].apply(f)
编辑:
或者,您可以执行以下操作:
date_ranges = [pd.date_range(start='2018-01-04', end='2018-01-01'),
pd.date_range(start='2017/12/25', end='2017/12/28'),
pd.date_range(start='2017/12/18', end='2017/12/20'),
]
df['group'] = df['date'].apply(lambda x: [i for i, date_rng in enumerate(date_ranges) if x in date_rng][0])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.