如何按姓名分组将DataFrame中CA行的Value替换为GCA对应值
分组替换DataFrame指定行的Value值
给定如下数据,需要按First Name和Last Name分组,将每组内Type为CA的行的Value替换为同组中Type为GCA的行的Value(若组内无GCA行则保留原Value):
import pandas as pd data = { 'First Name': ['Alice', 'Alice', 'Alice', 'Alice', 'Bob'], 'Last Name': ['Johnson', 'Johnson', 'Johnson', 'Johnson', 'Jack'], 'Type': ['CA', 'DA', 'FA', 'GCA', 'CA'], 'Value': [25, 30, 35, 40, 50] } df = pd.DataFrame(data)
解决方案
使用groupby结合transform实现分组内的取值与替换:
# 分组获取每组GCA对应的Value值,无GCA则保留原数据 gca_values = df.groupby(['First Name', 'Last Name'])['Value'].transform( lambda x: x[df.loc[x.index, 'Type'] == 'GCA'].iloc[0] if (df.loc[x.index, 'Type'] == 'GCA').any() else x ) # 替换Type为CA的行的Value df.loc[df['Type'] == 'CA', 'Value'] = gca_values[df['Type'] == 'CA']
结果验证
执行后输出DataFrame:
First Name Last Name Type Value 0 Alice Johnson CA 40 1 Alice Johnson DA 30 2 Alice Johnson FA 35 3 Alice Johnson GCA 40 4 Bob Jack CA 50
可以看到Alice Johnson组的CA行Value已从25替换为同组GCA行的40,而Bob Jack组因无GCA行,CA行Value保持50不变。
内容的提问来源于stack exchange,提问作者notrly
相关产品推荐
相关产品推荐

