python - pandas groupby 返回一个布尔向量
问题描述
我有一个时间序列数据库,我想将数据分组以将它们与同一行中的另一个单元格以及前一个值进行比较。
下面的代码将针对整个数据帧返回一个向量,但是如果我尝试对其进行分组,我会得到一个带有 apply() 的数据帧和一个带有 agg 或 transform 的错误。
样本数据框
df = pd.DataFrame({ 'group': [1, 1, 1, 2,2,2,1,2, 1], 'target': [100,100,100,100,10,10,10,10,50],'val' :[90,80,70,4,120,6,60,8, 50] })
df
group target val
0 1 100 90
1 1 100 80
2 1 100 70
3 2 100 4
4 2 10 120
5 2 10 6
6 1 10 60
7 2 10 8
8 1 50 50
这是我对功能的尝试
def spike(df):
high = df['val'] > df['target']+25
rising = df['val'] > df['val'].shift()
return high & rising
print(spike(df))
print( df.groupby('group').apply(spike))
输出
0 False
1 False
2 False
3 False
4 True
5 False
6 True
7 False
8 False
dtype: bool
0 1 2 6 8
group
1 False False False False False
2 False True False False True
这是我的输出,我试图让第二个输出看起来像第一个输出,除了第 6 行应该是假的。
解决方案
你想多了:
shift = df.groupby('group')['val'].shift()
df['val'].gt(df['target']+25) & df['val'].gt(shift)
输出:
0 False
1 False
2 False
3 False
4 True
5 False
6 False
7 False
8 False
dtype: bool
推荐阅读
- r - 根据在另一个选项卡上选择的新数据刷新闪亮应用程序上的选项卡
- python-3.x - 如何在笔记本内的云端硬盘中读取文件夹内的文件
- encryption - 加密断言 SAML 响应
- php - 如何在php中设置前3个月?
- mysql - MySQL案例何时(.....,间隔3天)用于数字而不是日期?
- python - Pyspark sql:根据不同DataFrame的列中是否存在值创建新列
- robotframework - 机器人框架:“确认页面加载”关键字在一个测试中通过,而在另一个测试中失败
- c# - 不能在 Button1_Click() 中使用 Form1() 中声明的变量
- python - AttributeError:“str”对象没有属性“fit”
- java - 如何使用 JDBC 从 mySQL 获取特定列?