我的数据框如下:
df = {'emp': [123, 234], 'state': ['AL', 'CA'], 'start_time': ['08:00', '08:00'], 'end_time': ['17:00', '17:00']
df.head()
emp|state|start_time|end_time
123|AL|11/05/2020 08:00|11/05/2020 17:00
234|CA|11/05/2020 08:00|11/05/2020 17:00
我还有一个单独的字典,如下所示:
START_ADJUST = {"AL": 0, "CA": 20}
需要一个python函数,用于df中的每个状态,将字典中该状态键的值的分钟数与数据帧中“ start_time”中的军事时间值相加。
这是我尝试过的:
df['prep_mins'] = df['state'].map(START_ADJUST)
df['start_time'] = pd.to_datetime(df['start_time']) + pd.to_timedelta(df['prep_mins'], unit = 'm')
预期结果:
emp|state|start_time|end_time
123|AL|11/05/2020 08:00|11/05/2020 17:00
234|CA|11/05/2020 08:20|11/05/2020 17:00
我得到的结果:
emp|state|start_time|end_time
123|AL|11/05/2020 08:00|11/05/2020 17:00
234|CA|11/05/2020 08:00|11/05/2020 17:00
两个一个问题 s :
2)如何将字典值的值添加到数据框架中的列?
答案 0 :(得分:1)
这是一种方法。我将日期添加到原始数据中,并将时间偏移量从0更改为1,以验证是否应用了所有调整。
import pandas as pd
df = {'emp': [123, 234],
'state': ['AL', 'CA'],
'start_time': ['2020-11-05 08:00', '2020-11-05 08:00'],
'end_time': ['2020-11-05 17:00', '2020-11-05 17:00'],
}
# create data frame
df = pd.DataFrame(data=df)
# convert data type
df['start_time'] = pd.to_datetime(df['start_time'])
df['end_time'] = pd.to_datetime(df['end_time'])
# original adjustments
start_adjust = {"AL": 1, "CA": 20}
# convert data type
start_adjust = {
key: pd.to_timedelta(value, unit='minute')
for key, value in start_adjust.items()
}
# apply adjustment
df['start_time'] += df.apply(lambda x: start_adjust[x['state']], axis=1)
# results
print(df)
emp state start_time end_time
0 123 AL 2020-11-05 08:01:00 2020-11-05 17:00:00
1 234 CA 2020-11-05 08:20:00 2020-11-05 17:00:00