如何用Pandas有条件地将GB行Col2值复制到对应FR行Col2
使用Pandas实现GB行Col2值复制到对应FR行Col2
我来帮你搞定这个需求!从你的示例能看出来,规则是按顺序将每个GB行的Col2值,对应复制到同顺序的FR行Col2中,下面是具体的Pandas实现步骤和代码:
首先,我们先还原你的示例输入数据:
import pandas as pd # 构建示例输入的DataFrame data = { 'Country': ['GB', 'FR', 'GB', 'FR', 'GB', 'CN'], 'Col1': [4, 2, 1, 7, 2, 3], 'Col2': [5, 'x', 6, 'x', 8, 'x'] } df = pd.DataFrame(data)
核心实现逻辑
我们需要先提取所有GB行的Col2值,再找到所有FR行的位置,按顺序把值对应过去:
# 提取所有GB行的Col2值,转成列表 gb_col2 = df[df['Country'] == 'GB']['Col2'].tolist() # 获取所有FR行的索引 fr_rows = df[df['Country'] == 'FR'].index # 按顺序给FR行的Col2赋值 df.loc[fr_rows, 'Col2'] = gb_col2
验证结果
运行完上面的代码后,打印DataFrame就能得到你要的预期输出:
Country Col1 Col2 0 GB 4 5 1 FR 2 5 2 GB 1 6 3 FR 7 6 4 GB 2 8 5 CN 3 x
额外处理:GB和FR数量不匹配的情况
如果你的数据里GB和FR的数量不一致(比如FR比GB多,或者反过来),可以加个判断只匹配对应数量的行,避免报错:
# 取两者的最小数量,只赋值对应数量的行 match_count = min(len(gb_col2), len(fr_rows)) df.loc[fr_rows[:match_count], 'Col2'] = gb_col2[:match_count]
这样多出来的FR行(如果有的话)会保留原来的x,多出来的GB行则不会影响其他行。
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

