[英]apply 1-to-group transformations in pandas - python
我有一个如下的数据框
import pandas as pd
df = pd.DataFrame({"id": ["a", "b", "c", "d"], "v": [1,2,3,4], "type": ["X", "Y", "Y", "Y"]}).set_index("id")
print(df)
产生:
type v
id
a X 1
b Y 2
c Y 3
d Y 4
我想从每个值中减去均值GROUP 。 手术后,我仍然想拥有我的SINGLE值 。 换句话说,我想拥有
type v
id
a X 0
b Y -1
c Y 0
d Y 1
因此,应用于groupby
对象的非常有用的transform
函数(如http://pandas.pydata.org/pandas-docs/stable/groupby.html所述 )在我的情况下不是很有用,我想知道如何处理问题。
这并不是说我在处理简单函数时无法解决此问题(除法/减法=>我可以使用由groupby生成的辅助数据框,然后将结果相乘,但是在处理更复杂的内容时不再是这种情况)
转换实际上会为您提供所需的内容(如果我理解正确的话):
df['v'] = df['v'] - df.groupby('type')['v'].transform('mean')
Transform按组计算应用的功能,但将结果广播到原始索引上。
编辑 :时间比较
%timeit df.groupby("type")['v'].apply(lambda x: x-x.mean())
100 loops, best of 3: 2.95 ms per loop
%timeit df['v'] - df.groupby('type')['v'].transform('mean')
1000 loops, best of 3: 922 µs per loop
IIUC试试这个:
df ['v'] = df.groupby("type")['v'].apply(lambda x: x-x.mean())
df
type v
id
a X 0.0
b Y -1.0
c Y 0.0
d Y 1.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.