Python 为每天指定最小持续时间的重叠范围值
我有这样一个数据帧: 开始一天 结束一天 价值 1. 4. 1. 1. 6. 2. 1. 8. 3.Python 为每天指定最小持续时间的重叠范围值,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个数据帧: 开始一天 结束一天 价值 1. 4. 1. 1. 6. 2. 1. 8. 3. 首先创建由ranges填充的新列,然后使用并最后聚合min: df['day'] = df.apply(lambda x: range(x['start_day'], x['end_day']+1), axis=1) df = df.explode('day').groupby('day', as_index=False)['value'].min() print (df) day v
首先创建由
range
s填充的新列,然后使用并最后聚合min
:
df['day'] = df.apply(lambda x: range(x['start_day'], x['end_day']+1), axis=1)
df = df.explode('day').groupby('day', as_index=False)['value'].min()
print (df)
day value
0 1 1
1 2 1
2 3 1
3 4 1
4 5 2
5 6 2
6 7 3
7 8 3
编辑:
谢谢我不得不稍微修改它:
df['duration']=df.end\u day-df.start\u day
df.explode('day').groupby('day',as\u index=False)).apply(lambda-df:df.loc[df.duration.idxmin()])['value']
根据最小持续时间获取它,但这是一个好的开始。@ACB-谢谢,我稍微改变了一下你的解决方案。
df['duration'] = df.end_day - df.start_day
df['day'] = df.apply(lambda x: range(x['start_day'], x['end_day']+1), axis=1)
df1 = df.explode('day').reset_index(drop=True)
df = df1.loc[df1.groupby('day').duration.idxmin()]
print (df)
start_day end_day value duration day
0 1 4 1 3 1
1 1 4 1 3 2
2 1 4 1 3 3
3 1 4 1 3 4
8 1 6 2 5 5
9 1 6 2 5 6
16 1 8 3 7 7
17 1 8 3 7 8