问题是:
首先,我想选择数据帧(例如,df3
),df1中的每个index1都在d_reach
和d_start
之间
其次,我想得到满足两个条件的数据帧(比如,df4
):
df
中的索引在df3
中的索引之间的范围内下面是生成示例的代码:
import numpy as np
import pandas as pd
import datetime
from datetime import timedelta
index = pd.date_range(datetime.datetime(2021, 1, 1, 1, 0), periods = 20160, freq = "10s")
data = {'id1': np.tile(np.repeat([0,1], 42), 240), 'id2': np.tile(np.repeat([2,4,6,8], 60), 84)}
df = pd.DataFrame(data, index = index)
index1 = pd.date_range(datetime.datetime(2021, 1, 1, 1, 1), periods = 1000, freq = "3min")
df1 = pd.DataFrame(np.random.random(1000), index = index1, columns = ['r'])
d_start = pd.date_range(datetime.datetime(2021, 1, 1, 1, 1), periods = 500, freq = "5min")
d_reach = d_start + timedelta(seconds = np.random.randint(low = 4, high = 6))
value = {'id3': np.tile([0,1], 250)}
df2 = pd.DataFrame(value, index = [d_start,d_reach])
df2.index.names = ['d_start','d_reach']
虽然我已经知道了如何执行第二步(参见下面的Python脚本),但我已经为第一步奋斗了好几个星期
df.sort_index(inplace=True)
df3.sort_index(inplace=True)
df4 = (
pd
.concat([
df.loc[idx1:idx2].iloc[:-1]
for idx1, idx2 in zip(df3.index.tolist()[:-1], df3.index.tolist()[1:])
if df.loc[idx1:idx2]['id1'].pipe(lambda s: s == s[0]).all()
and df.loc[idx1:idx2]['id2'].pipe(lambda s: s == s[0]).all()
])
)
df2
是多索引的
df3的预期输出应为:
2021-01-01 01:07:00 0.011026
2021-01-01 01:10:00 0.423813
...
这里index1
在df1
{df2
中的d_reach
之一
和{
非常感谢任何关于在Python中查找df3
的建议。谢谢
目前没有回答
相关问题 更多 >
编程相关推荐