这是link的后续问题
下面是df
:
df = pd.DataFrame({'col1':[1,2,3,4,5,6,7,8,9,10],
'col2':[10,15,20,25,30,35,40,45,50,55],
'col3':['A','A','A','A','B','B','B','B','B','B']})
我想计算每一行'window'
的col1
和col2
的中值。为此,我有以下函数:
def calculate_median_val(df, window):
return df.groupby(np.arange(len(df))//window)['col1','col2'].median()
此功能存在两个问题:
1.返回的df
不包含col3
。我知道我们不能计算字符串的中位数,但我如何确保它仍然存在?预期的df
如下:
如果window = 2
:预期返回的df
为:
col1 col2 col3
0 1.5 12.5 A
1 3.5 22.5 A
2 5.5 32.5 B
3 7.5 42.5 B
4 9.5 52.5 B
然而,如果window=3
,那么在col3
第二个窗口中,将有'A','B','B'
。理想情况下,我希望保持'B'
,因为它是大多数,但现在不是很关键,它可以是'A'
或'B'
。
1.当我运行上面的函数时,它会给出一个未来警告:
未来警告:使用多个键(隐式转换为键元组)的索引将被弃用,请使用列表。
我认为这是由于传递了多个参数来计算中值。
1条答案
按热度按时间qyyhg6bp1#
你可以通过指定
col1
的函数来传递GroupBy.agg
,比如GroupBy.first
或GroupBy.last
:如果需要,可以对
B
进行优先级排序,创建有序分类并按max
进行聚合: