我有以下形式的熊猫数据帧:熊猫GROUPBY和广播结果原来的数据帧
bowler inning wickets Total_wickets matches balls
0 SL Malinga 1 69 143 44 4078
1 SL Malinga 2 74 143 54 4735
2 A Mishra 1 48 124 50 3908
3 A Mishra 2 76 124 62 4930
4 DJ Bravo 1 61 122 48 3887
我想GROUPBY上“投球手”和“局”这个DF和执行在'wickets'和'balls'列上进行一些计算,然后将它广播到与新列相同的df。 的方法之一,我尝试是使用的变换,例如:
df_bowler['strike rate'] = df_bowler.groupby(['bowler','inning']).transform(lambda x : x['balls']/x['wickets'])
这导致KeyError异常例外:
KeyError: ('balls', 'occurred at index wickets')
我完成我需要的东西,通过使用应用],然后合并,例如:
df_strRate = df_bowler.groupby(['bowler','inning']).apply(lambda x:x['balls']/x['wickets']).reset_index(level=2,drop=True).reset_index(name='strike rate')
df_bowler = df_bowler.merge(df_strRate,on=['bowler','inning'])
但是,这似乎是一个迂回的做法。我想知道为什么变换在这种情况下失败。任何指针?
谢谢。
我认为你是错的 - 你的变换并不['GroupBy.transform'(HTTP://大熊猫。 pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.transform.html),但['DataFrame.transform'](http://pandas.pydata.org/pandas-docs/stable/ generated/pandas.DataFrame.transform.html),因为汇总'sum'后会得到另一个数据帧。 – jezrael
我明白了为什么我的初始转换失败了,谢谢。但是,我无法让您的转换解决方案正常工作。变形时我得到一个attributeError。 – Tontodoin
我不得不看到那个回溯。我只是再试一次,我不必做任何特别的事情,它仍然有效。检查你的df。keys()' –