【发布时间】:2021-05-10 21:52:15
【问题描述】:
我无法在多列中将此函数与 groupby 一起应用,但会跳过某些列。
我的数据框如下所示:
arr = pd.DataFrame(
[[201207310930, 0.0022, -0.0160, 0.0055, 0.0324, -0.0328],
[201207310930, 0.0040, -0.0073, 0.0293, 0.0465, -0.0275],
[201207310930, -0.0095,-0.0080, 0.0215, 0.0525, -0.0317],
[201207311030, -0.0005,-0.0040, -0.0149, 0.0135, 0.0488],
[201207311030, -0.0087,-0.0240, 0.0134, 0.0480, -0.0331]]
)
我想按日期时间分组,然后去趋势(减去平均值),所以这是我尝试过的(忽略 x1 列):
detrendfunc = lambda x: (x - x.mean())
cols = arr.columns[2:]
output=df.groupby(['Datetime'])[cols].transform(detrendfunc)
我的问题是这只是输出一堆零,我认为它只是从 x 的平均值中减去 x,但 x 的平均值只包括一个元素,而不是一组元素。
预期的结果是一个新的数据框,其中每列中每个组的平均值从每个元素中减去:
201207310930 0.0033 -0.00556 -0.01326 -0.0114 -0.00213
201207310930 0.0051 0.00313 0.01053 0.0027 0.00316
201207310930 -0.0084 0.00243 0.00273 0.0087 -0.001033
201207311030 0.0041 0.01 -0.01415 -0.01725 0.04095
201207311030 -0.0041 -0.01 0.01415 0.01725 -0.04095
【问题讨论】:
-
变量
arr里面是什么? -
具有日期时间、x1、x2...x5 的数据框
-
你能编辑你的代码并把预期的结果放在那里吗?
-
OK 我已经添加了预期的结果并展示了如何创建 arr。
标签: python pandas dataframe lambda