如何查找df1中所有特定开始日期范围与df2中相应结束日期之间的天数。然后将df1中的特定行除以特定行中的天数(包括特定kWh值的除法,并写入if到df1)。
例如:
DF1:
64 65 START DATE
0 54.37 65.37 2013-05-03 00:00:00
1 43.52 51.23 2013-06-05 00:00:00
DF2:
Start Date End Date kWh
0 5/3/2013 6/5/2013 59,120
1 6/5/2013 7/2/2013 60,400
更新了df1:
64 65 kWh START DATE
0 1.647575758 1.980909091 1791.51 2013-05-03 00:00:00 # all columns except date is divided by 33
1 1.611851852 1.897407407 2237.037 2013-06-05 00:00:00 # all columns except date is divided by 27
33是df1开始日期5/3/2013之间的天数& df2截止日期6/5/2013
27是df1开始日期6/5/2013和之间的天数。 df2截止日期7/2/2013
我将如何做到这一点?
答案 0 :(得分:1)
加入两个数据帧,转换为datetime并减去:
import pandas as pd
df = pd.DataFrame({'Start Date':['5/3/2013', '6/5/2013'], 'End Date':['6/5/2013', '7/2/2013'], 'kWh':[59120, 60400]})
pd.to_datetime(df['Start Date']) - pd.to_datetime(df['End Date'])
结果:
0 -33 days
1 -27 days
dtype: timedelta64[ns]
如果你想要这些日子:
df['delta'] = pd.to_datetime(df['Start Date']) - pd.to_datetime(df['End Date'])
df.delta.dt.days
答案 1 :(得分:1)
首先,将所有日期转换为时间戳:
# Sample Data.
df1 = pd.DataFrame({64: [54.37, 43.52], 65: [65.37, 51.23], 'START DATE': ['2013-05-03 00:00:00', '2013-06-05 00:00:00']})
df2 = pd.DataFrame({'Start Date': ['5/3/2013', '6/5/2013'], 'End Date': ['6/5/2013', '7/2/2013'], 'kWh': [59120, 60400]})
# Convert dates to timestamps.
df1['START DATE'] = pd.to_datetime(df1['START DATE'])
df2['Start Date'] = pd.to_datetime(df2['Start Date'])
df2['End Date'] = pd.to_datetime(df2['End Date'])
现在,加入End Date
df2
到df1
。
df1 = df1.merge(df2[['Start Date', 'End Date', 'kWh']],
how='left', left_on='START DATE', right_on='Start Date')
计算开始日期和结束日期之间的天数:
days = (df1['End Date'] - df1['START DATE']) / pd.offsets.Day(1)
让我们清理合并后的数据:
df1.drop(['Start Date', 'End Date'], axis='columns', inplace=True)
最后,一些体操将df
除以计算的天数:
df1.update((df1[[64, 65, 'kWh']].T / days.values).T)
>>> df1
64 65 START DATE kWh
0 1.647576 1.980909 2013-05-03 1791.515152
1 1.611852 1.897407 2013-06-05 2237.037037