基于另一DataFrame的条件对指定DataFrame列执行乘2运算
Pandas 按关联分类批量修改指定列值
问题场景
现有两个DataFrame:
- df1包含
name(姓名)和letter(分类字母)两列 - df2的列名与df1的
name完全对应,每行均为数值
需求:将df2中,对应df1里letter为'B'的那些列的所有行数值乘以2,得到目标结果。
原始数据
df1:
name | letter john (345) | A patrick (539) | A drew (245) | A john (591) | B patrick (912) | B drew (553) | B
df2:
john (345) | patrick (539) | drew (245) | john (591) | patrick (912) | drew (553) 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6
期望结果
john (345) | patrick (539) | drew (245) | john (591) | patrick (912) | drew (553) 1 1 1 2 2 2 2 2 2 4 4 4 3 3 3 6 6 6 4 4 4 8 8 8 5 5 5 10 10 10 6 6 6 12 12 12
解决方案
通过两步即可实现需求:
- 从df1中筛选出
letter为'B'的姓名列表,作为df2的目标列 - 对df2的目标列直接执行乘2操作
代码实现
import pandas as pd # 构造示例df1 df1 = pd.DataFrame({ 'name': ['john (345)', 'patrick (539)', 'drew (245)', 'john (591)', 'patrick (912)', 'drew (553)'], 'letter': ['A', 'A', 'A', 'B', 'B', 'B'] }) # 构造示例df2 df2 = pd.DataFrame({ 'john (345)': [1,2,3,4,5,6], 'patrick (539)': [1,2,3,4,5,6], 'drew (245)': [1,2,3,4,5,6], 'john (591)': [1,2,3,4,5,6], 'patrick (912)': [1,2,3,4,5,6], 'drew (553)': [1,2,3,4,5,6] }) # 筛选需要修改的目标列名 target_cols = df1[df1['letter'] == 'B']['name'].tolist() # 对目标列执行乘2操作(直接修改原df2) df2[target_cols] *= 2 # 打印查看结果 print(df2)
如果不想修改原df2,可以先复制一份再操作:
df2_modified = df2.copy() df2_modified[target_cols] *= 2
内容的提问来源于stack exchange,提问作者baseballdude7711
相关产品推荐
相关产品推荐

