创建新的 pd 数据框列,该列根据起始数据的日和周给出日期
Create new pd dataframe column that gives a date based on day and week starting data
我有一个 pandas 数据框,它有两列,第一列是 'Week Starting',另一列是 'Day'。我想创建一个新列,使用其他两列的数据来提供完整日期。例如,在下面的 table 中,新列的第一个条目应该是 5/04/2021,第二个条目应该是 6/04/2021。
Week Starting
Day
5/04/2021
Monday
5/04/2021
Tuesday
5/04/2021
Wednesday
我尝试了以下解决方案,但出现错误
g['Week Starting'] = pd.to_datetime(g['Week Starting'])
conditions = [ (g['Day'] == 'Monday'), (g['Day'] == 'Tuesay'), (g['Day'] ==
'Wednesday')]
values = [g['Week Starting'],(g['Week Starting'] + timedelta(days=1)),
(g['Week Starting'] + timedelta(days=2))]
g['Date'] = np.select(conditions, values)
错误:
DType 和 没有通用的 DType。例如,除非 dtype 为 object
.
,否则它们不能存储在单个数组中
谢谢。
我认为这是最简单的解决方案:
df = pd.DataFrame({"week_starting":["04/05/2021","04/05/2021","04/05/2021"],
"day":["Monday","Tuesday","Wednesday"]})
df['week_starting'] = pd.to_datetime(df['week_starting'])
conditions = {"Monday":0,"Tuesday":1,"Wednesday":2}
df["date"] = df.apply(lambda x:x['week_starting']+pd.Timedelta(conditions[x["day"]],"day"),axis=1)
您使用 apply 方法将时间增量添加到每个日期。
希望有用!
使用to_timedelta
with mapping values by Series.map
:
df['week_starting'] = pd.to_datetime(df['week_starting'])
d = {"Monday":0,"Tuesday":1,"Wednesday":2,
"Thursday":3,"Friday":4,"Saturday":5, 'Sunday':6}
df["date"] = df['week_starting'] + pd.to_timedelta(df["day"].map(d),"day")
print (df)
week_starting day date
0 2021-04-05 Monday 2021-04-05
1 2021-04-05 Tuesday 2021-04-06
2 2021-04-05 Wednesday 2021-04-07
我有一个 pandas 数据框,它有两列,第一列是 'Week Starting',另一列是 'Day'。我想创建一个新列,使用其他两列的数据来提供完整日期。例如,在下面的 table 中,新列的第一个条目应该是 5/04/2021,第二个条目应该是 6/04/2021。
Week Starting | Day |
---|---|
5/04/2021 | Monday |
5/04/2021 | Tuesday |
5/04/2021 | Wednesday |
我尝试了以下解决方案,但出现错误
g['Week Starting'] = pd.to_datetime(g['Week Starting'])
conditions = [ (g['Day'] == 'Monday'), (g['Day'] == 'Tuesay'), (g['Day'] ==
'Wednesday')]
values = [g['Week Starting'],(g['Week Starting'] + timedelta(days=1)),
(g['Week Starting'] + timedelta(days=2))]
g['Date'] = np.select(conditions, values)
错误:
DType object
.
谢谢。
我认为这是最简单的解决方案:
df = pd.DataFrame({"week_starting":["04/05/2021","04/05/2021","04/05/2021"],
"day":["Monday","Tuesday","Wednesday"]})
df['week_starting'] = pd.to_datetime(df['week_starting'])
conditions = {"Monday":0,"Tuesday":1,"Wednesday":2}
df["date"] = df.apply(lambda x:x['week_starting']+pd.Timedelta(conditions[x["day"]],"day"),axis=1)
您使用 apply 方法将时间增量添加到每个日期。
希望有用!
使用to_timedelta
with mapping values by Series.map
:
df['week_starting'] = pd.to_datetime(df['week_starting'])
d = {"Monday":0,"Tuesday":1,"Wednesday":2,
"Thursday":3,"Friday":4,"Saturday":5, 'Sunday':6}
df["date"] = df['week_starting'] + pd.to_timedelta(df["day"].map(d),"day")
print (df)
week_starting day date
0 2021-04-05 Monday 2021-04-05
1 2021-04-05 Tuesday 2021-04-06
2 2021-04-05 Wednesday 2021-04-07