我目前正在尝试解析从一个数据帧到另一个具有定期timedateindex的数据帧的起始日期和结束日期。 df1是我的输入数据帧,我想将其解析为df2-structure。 实际上,我不需要这些值本身,我只想标记它们出现的时间。
Start End Value1 Value2
1 2018-01-02 15:20 2018-01-02 19:50 x Nan
2 2018-03-21 05:40 2018-03-22 11:20 a b
3 ...
Value1 Value2
2018-01-02 15:10 False False
2018-01-02 15:20 True False
2018-01-02 15:30 True False
2018-01-02 15:40 True False
...
2018-01-02 19:50 True False
2018-01-02 20:00 False False
我已经有了df2的结构,但是我不知道如何转换数据。
date_rng=pd.date_range(start='2018-01-01', end='2018-12-31', freq='10min')
df2=pd.DataFrame(date_rng, columns=['Date'])
df2['datetime'] = pd.to_datetime(df2['Date'])
df2 = df2.set_index('datetime')
df2.drop(['Date'], axis=1, inplace=True)
任何人都可以帮忙吗? 非常感谢
答案 0 :(得分:0)
您可以将所有值都设置为False来初始化df2,然后遍历两个数据帧,并检查df2中的时间是否在df1中指定间隔的一个/或多个范围内。
这是一个工作示例:
# | create some dummy data
data = [{'Start': '2018-01-02 15:20', 'End': '2018-01-02 19:50', 'Value1': 'x', 'Value2': np.nan},
{'Start': '2018-01-01 00:00:00', 'End': '2018-01-01 00:15:00', 'Value1': 'a', 'Value2': np.nan}]
df1 = pd.DataFrame(data)
df1['Start'] = pd.to_datetime(df1['Start'])
df1['End'] = pd.to_datetime(df1['End'])
date_rng=pd.date_range(start='2018-01-01', end='2018-12-31', freq='10min')
df2=pd.DataFrame(date_rng, columns=['Date'])
df2['Date'] = pd.to_datetime(df2['Date'])
df2 = df2.set_index('Date', drop=True)
# | initialize all values with False
df2['Value1'] = False
df2['Value2'] = False
# | iterate through dataframes (also check if values are NaN)
for _, row_1 in df1.iterrows():
for index_2, row_2 in df2.iterrows():
if not pd.isnull(row_1['Value1']):
row_2['Value1'] = row_1['Start'] <= index_2 and row_1['End'] >= index_2
if not pd.isnull(row_1['Value2']):
row_2['Value2'] = row_1['Start'] <= index_2 and row_1['End'] >= index_2
Value1 Value2
Date
2018-01-01 00:00:00 True False
2018-01-01 00:10:00 True False
2018-01-01 00:20:00 False False
2018-01-01 00:30:00 False False
.
.
.