我有一个包含名称和大小列的数据框。我需要创建一个新列(size_total),该列是按名称列分组的所有唯一大小值的总和。
df = pd.DataFrame([
{'sp': 'A', 'size': 25},
{'sp': 'B', 'size': 26},
{'sp': 'C', 'size': 27},
{'sp': 'A', 'size': 25},
{'sp': 'B', 'size': 42},
{'sp': 'C', 'size': 27},
{'sp': 'A', 'size': 25},
{'sp': 'B', 'size': 32},
{'sp': 'C', 'size': 33}])
df['size_total'] = df['sp'].map(df[['sp', 'size']].drop_duplicates(keep='first').groupby('sp').sum()['size'])
有没有更有效的方法?
答案 0 :(得分:1)
如果首先将“ sp”设置为索引,则可以通过使熊猫进行映射来从原始解决方案中节省大约30%的时间。
df.set_index(df['sp'].values, inplace=True)
df['size_total'] = (
df.drop_duplicates(['sp', 'size']).groupby('sp')['size'].sum(level=0))