因此,我有一个包含两列的DataFrame,一列具有标签名称(df ['Labels']),另一列具有int值(df ['Volume'])。
df = pd.DataFrame({'Labels':
['A','A','A','A','B','B','B','B','B','B','A','A','A','A','A','A','A','A','C','C','C','C','C'],
'Volume':[10,40,20,20,50,60,40,50,50,60,10,10,10,10,20,20,10,20,80,90,90,80,100]})
我想确定标签更改的间隔,然后针对每个间隔计算“体积”列的中位数。稍后,我应将“音量”列的每个值替换为每个间隔的相应中位数。
对于标签A,我希望获得两个间隔的中位数。
这是我的DataFrame的外观:
df2 = pd.DataFrame({'Labels':['A','A','A','A','B','B','B','B','B','B','A','A','A','A','A','A','A','A','C','C','C','C','C'],
'Volume':[20,20,20,20,50,50,50,50,50,50,10,10,10,10,10,10,10,10,90,90,90,90,90]})
答案 0 :(得分:1)
您要groupby
块并转换中位数:
blocks = df['Labels'].ne(df['Labels'].shift()).cumsum()
df['group_median'] = df['Volume'].groupby(blocks).transform('median')
答案 1 :(得分:1)
使用Series.cumsum + Series.shift()使用groupby
创建组,然后使用transform
df['Volume']=df.groupby(df['Labels'].ne(df['Labels'].shift()).cumsum())['Volume'].transform('median')
print(df)
Labels Volume
0 A 20
1 A 20
2 A 20
3 A 20
4 B 50
5 B 50
6 B 50
7 B 50
8 B 50
9 B 50
10 A 10
11 A 10
12 A 10
13 A 10
14 A 10
15 A 10
16 A 10
17 A 10
18 C 90
19 C 90
20 C 90
21 C 90
22 C 90