Python 为每天指定最小持续时间的重叠范围值

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

我有这样一个数据帧:

开始一天 结束一天 价值 1. 4. 1. 1. 6. 2. 1. 8. 3.
首先创建由
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