创建新列的有效方式是由另一列分组的唯一值之和?

时间:2019-08-28 03:49:04

标签: python pandas

我有一个包含名称和大小列的数据框。我需要创建一个新列(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'])

有没有更有效的方法?

1 个答案:

答案 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))