在pandas

时间:2017-02-08 16:28:04

标签: python pandas

我有一个数据框如下。

df = pd.DataFrame({'var1' : list('a' * 3) + list('b' * 2) + list('c' * 4) 
         ,'var2' : [i for i in range(9)]
         ,'var3' : [20, 40, 100, 10, 80, 12,24, 53, 90]
     })

我想要的最终结果如下:


  var1 var2 var3  var3_lt_50
0   a   0   20    60
1   a   1   40    60
2   a   2   100   60
3   b   3   10    10
4   b   4   80    10
5   c   5   12    36
6   c   6   24    36
7   c   7   53    36
8   c   8   90    36

根据以下代码,我通过分组和合并分两步获得此结果:

df = df.merge(df[df.var3 < 50][['var1', 'var3']].groupby('var1', as_index = False).sum().rename(columns = {'var3' : 'var3_lt_50'})
         ,how = 'left'
         ,left_on = 'var1'
         ,right_on = 'var1')

有人可以告诉我一种做这种类型的布尔逻辑表达式的方法+没有&#34; groupby&#34;的inter groupby标量广播+&#34;合并&#34;我今天做的一步。我想要一个更平滑的代码。

提前感谢输入,

/ Swepab

1 个答案:

答案 0 :(得分:4)

您可以使用ValueError: Length of values does not match length of index 来保存变换变量的形状以及索引,这样您就可以将结果分配回数据框:

groupby.transform

enter image description here