我想对熊猫数据文件中的不同列执行不同的diff()操作。下面是在lambda函数中使用if-语句在col1上取diff(1),在col2上取diff(2)的示例。
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()操作,有人有一些方便的方法吗?
发布于 2022-06-03 13:03:39
如果所有操作返回序列的大小与原始列(如diff或cumsum )相同,则可以使用DataFrame.agg
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.0df = data.agg({'col1':lambda x: x.diff(), 'col2':'mean'})
print (df)ValueError:不能同时执行聚合和转换操作
发布于 2022-06-03 13:03:14
一个简单的选择可以是使用字典来保存句点:
periods = {'col1': 1, 'col2': 2}
data.apply(lambda c: c.diff(periods[c.name]))产出:
col1 col2
0 NaN NaN
1 10.0 NaN
2 12.0 27.0
3 8.0 5.0
4 14.0 6.0
...https://stackoverflow.com/questions/72490001
复制相似问题