python - 在 Pandas 中,我如何使用转换和使用来自其他列的信息?
问题描述
我想使用 R 风格的 mutate 函数,在这里我可以使用来自其他列的信息。例如:我想创建一个新列,其值是首先对变量进行分组,然后在同一数据框中插入一列与另一列的结果。新列为每个组获取相同的值。
我尝试将 apply 与广播一起使用,但是,它只会产生 NaN 值。
import pandas as pd
import numpy as np
d = {'Gain': [20, 20,19,18,17,21,21,20,19,18],
'Power':[30,31,32,33,34,33,34,35,36,37],
'GRP': ['A','A','A','A','A','B','B','B','B','B'],
}
df = pd.DataFrame(data=d)
# Subtract the value of Gain from the maximum value: THIS STEP WORKS
df['dGain']=df.groupby(['GRP'])['Gain'].transform(lambda x: max(x) - x)
# DOES NOT WORK!!!
df['Pcomp']=df.groupby(['GRP']).transform(lambda x:
np.interp(3,x.dGain,x.Power))
# DOES NOT WORK
df['Pcomp']=df.groupby(['GRP']).apply(lambda x: np.interp(3,x.dGain,x.Power))
我期望:
Gain Power GRP Pcomp dGain
0 20 30 A 33 0
1 20 31 A 33 0
2 19 32 A 33 1
3 18 33 A 33 2
4 17 34 A 33 3
5 21 33 B 36 0
6 21 34 B 36 0
7 20 35 B 36 1
8 19 36 B 36 2
9 18 37 B 36 3
解决方案
可以说,在 R 中transform
几乎等于,但是,它们还是有细微的差别,在 下,可以传一个,可以做多个,更多信息mutate
dplyr
groupby
object
transform
mutate
快速修复
df['Pcomp']=df.groupby('GRP').apply(lambda x: np.interp(3,x['dGain'],x['Power'])).reindex(df.GRP).values
df
Out[828]:
Gain Power GRP dGain Pcomp
0 20 30 A 0 34.0
1 20 31 A 0 34.0
2 19 32 A 1 34.0
3 18 33 A 2 34.0
4 17 34 A 3 34.0
5 21 33 B 0 37.0
6 21 34 B 0 37.0
7 20 35 B 1 37.0
8 19 36 B 2 37.0
9 18 37 B 3 37.0
推荐阅读
- javascript - Vue - 通过 vue 组件传递 prop 数组会导致未定义的错误
- java - 在集合的每个元素上调用函数
- python - 使用 ScanOndexForward 时没有 LastEvaluatedKey
- tcp - 如何在 AWS 网络负载均衡器上保持 TCP 连接处于活动状态
- angular - this.router.navigate 返回上一页 ionic 4 app
- php - PHP 的 DateTime Format 方法是在 PHP 中增加一秒
- javascript - 全局状态和回调分配
- r - 设置数据以便在 R 中使用 Prophet()
- c# - c#getstream-io中根据自己提供的数据查找频道
- wso2 - WSO2 IS-KM 和 WSO2 AM 与 HA