考虑以下数据帧

df = pd.DataFrame({'group1' : ['A', 'A', 'A', 'A',
                         'A', 'A', 'A', 'A'],
                   'group2' : ['C', 'C', 'C', 'C',
                         'C', 'E', 'E', 'E'],
                   'time' : [-6,-5,-4,-3,-2,-6,-3,-4] ,
                   'col': [1,2,3,4,5,6,7,8]})

df
Out[36]:
   col group1 group2  time
0    1      A      C    -6
1    2      A      C    -5
2    3      A      C    -4
3    4      A      C    -3
4    5      A      C    -2
5    6      A      E    -6
6    7      A      E    -3
7    8      A      E    -4

我的目标是创建一个列,对于['group1','group2']中的每个组,在col处计算的time = -6的比率除以在col处计算的time = -4
也就是说,对于组['A','C'],我希望这个列等于1/3,对于组['A','E'],它是6/8。group1group1在数据中都有许多不同的值。
我怎么能在熊猫身上得到呢?
有点像
 df.groupby(['group1','group2']).transform(lambda x: x.ix[x['time'] == -6,'col'] / x.ix[x['time'] == -4,'col'])

不起作用。。
有什么想法吗?
谢谢!

最佳答案

你可以不用这样做:

dfm = pd.merge(df[df.time == -4],df[df.time == -6],on=["group1","group2"])
dfm['Div'] = dfm.col_y.div(dfm.col_x)
df = pd.merge(df,dfm[['group1','group2','Div']],on=["group1","group2"])

输出:
   col group1 group2  time       Div
0    1      A      C    -6  0.333333
1    2      A      C    -5  0.333333
2    3      A      C    -4  0.333333
3    4      A      C    -3  0.333333
4    5      A      C    -2  0.333333
5    6      A      E    -6  0.750000
6    7      A      E    -3  0.750000
7    8      A      E    -4  0.750000

关于python - 如何在Pandas groupby中切片和合并特定的行值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39771306/

10-11 21:07