Pandas groupby:使用groupby标记自己组中的元素

2024-09-30 22:20:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我是py的初学者。我的问题是,我没有将时间序列中的元素与其在分位数度量上各自的组进行比较。 这是数据框:

import numpy as np
import pandas as pd

#np.random.seed(444)

df = pd.DataFrame({
     'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo','foo','bar'],
     'B' : ['one', 'one', 'two', 'two','two', 'two', 'one', 'two','one','two'],
     '2018-09-28' : np.random.randn(10), 
     '2018-10-06' : np.random.randn(10),
     '2018-10-13' : np.random.randn(10)
})

df.index = ['se0','se1','se2','se3','se4','se5','se6','se7',"se8",'se9']
df.index.name = 'SE'

然后在计算下限和上限的地方创建2个df

#根据A组和B组计算低分位数和高分位数,并放入
它在索引级别(se0,…)

df_low = df.groupby(['A','B']).transform(lambda x : x.quantile(0.45))
df_high = df.groupby(['A','B']).transform(lambda x : x.quantile(0.55))

print(df_low)
print(df_high)

#根据评估se0,…,se9相对于组分位数的值的测试,在有标志(1或-1)的地方创建一个新的df

f=lambda x : -1 if x<df_low else 1 if x>df_high else 0
transformed=df.iloc[:,2:].apply(f)

我犯了个错误。我错在哪里?你知道吗


Tags: lambdaimportdffooasnpbarrandom
1条回答
网友
1楼 · 发布于 2024-09-30 22:20:03

使用x<df_low返回布尔值的数据帧,其中原始df中大于x的值为True

这就是为什么会出现错误,因为if语句期望的是True或False,而不是dataframe。你知道吗

这将为您提供所需的数据帧:

transformed = pd.DataFrame(0, index=df.iloc[:,2:].index, columns=df.iloc[:,2:].columns)
transformed[df.iloc[:,2:] < df_low] = -1
transformed[df.iloc[:,2:] > df_high] = 1

相关问题 更多 >