繁体   English   中英

在熊猫中应用1-to-group转换-python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM