Pandas按ISIN分组求和时如何保留首个非唯一的Name字段值
实现方法
你可以在groupby聚合时为不同列指定不同的聚合规则,Name和Sector取分组内首个值用first,Value求和用sum即可,完整代码如下:
import pandas as pd # 原始DataFrame df = pd.DataFrame({'ISIN': ['A1kT23', 'A1kT23', 'B333', '49O33'], 'Name': ['Example A', 'Name Xy', 'Example B', 'Test123'], 'Sector': ['Energy', 'Energy', 'Utilities', 'Real Estate'], 'Value': [100, 50, 7, 23]}) # 按ISIN分组聚合 res_df = df.groupby('ISIN', as_index=False).agg( Name = ('Name', 'first'), Sector = ('Sector', 'first'), Value = ('Value', 'sum') ) # 输出查看结果 print(res_df)
运行后输出结果和你要求的完全一致:
ISIN Name Sector Value 0 A1kT23 Example A Energy 150 1 B333 Example B Utilities 7 2 49O33 Test123 Real Estate 23
如果需要确保取的首个值符合业务顺序,可在分组前先对原始DataFrame按指定字段排序:
# 示例:先按ISIN、自定义排序字段升序排列,保证分组取到的first值符合预期 df = df.sort_values(by=['ISIN', '你的排序字段'], ascending=True)
内容的提问来源于stack exchange,提问作者Economist Learning Python
相关产品推荐
相关产品推荐

