首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同列上的不同diff操作

不同列上的不同diff操作
EN

Stack Overflow用户
提问于 2022-06-03 13:01:19
回答 2查看 48关注 0票数 0

我想对熊猫数据文件中的不同列执行不同的diff()操作。下面是在lambda函数中使用if-语句在col1上取diff(1),在col2上取diff(2)的示例。

代码语言:javascript
复制
data = pd.DataFrame({'col1':[32,42,54,62,76,76,87,98,122,111,132,134,134,156],
                    'col2':[32,58,59,63,65,72,95,100,102,101,232,234,234,256]})

data.apply(lambda x: x.diff(1) if x.name=='col1' else x.diff(2))

我第一次想到的是一个有字典的解决方案,类似于agg函数。如果有两个以上的列,这就更容易了。对于如何在不同的列上进行不同的diff()操作,有人有一些方便的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-03 13:03:39

如果所有操作返回序列的大小与原始列(如diffcumsum )相同,则可以使用DataFrame.agg

代码语言:javascript
复制
df = data.agg({'col1':lambda x: x.diff(), 'col2':lambda x: x.diff(2)})
print (df)
    col1   col2
0    NaN    NaN
1   10.0    NaN
2   12.0   27.0
3    8.0    5.0
4   14.0    6.0
5    0.0    9.0
6   11.0   30.0
7   11.0   28.0
8   24.0    7.0
9  -11.0    1.0
10  21.0  130.0
11   2.0  133.0
12   0.0    2.0
13  22.0   22.0
代码语言:javascript
复制
df = data.agg({'col1':lambda x: x.diff(), 'col2':'mean'})
print (df)

ValueError:不能同时执行聚合和转换操作

票数 1
EN

Stack Overflow用户

发布于 2022-06-03 13:03:14

一个简单的选择可以是使用字典来保存句点:

代码语言:javascript
复制
periods = {'col1': 1, 'col2': 2}

data.apply(lambda c: c.diff(periods[c.name]))

产出:

代码语言:javascript
复制
    col1   col2
0    NaN    NaN
1   10.0    NaN
2   12.0   27.0
3    8.0    5.0
4   14.0    6.0
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72490001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档