Python Pandas:如何根据另一列的条件合并DataFrame列
根据条件合并DataFrame列的实现方法
给定如下DataFrame:
value,combined,value_shifted,Sequence_shifted,long,short 12834.0,2.0,12836.0,3.0,2.0,-2.0 12813.0,-2.0,12781.0,-3.0,-32.0,32.0 12830.0,2.0,12831.0,3.0,1.0,-1.0 12809.0,-2.0,12803.0,-3.0,-6.0,6.0 12822.0,2.0,12805.0,3.0,-17.0,17.0 12800.0,-2.0,12807.0,-3.0,7.0,-7.0 12773.0,2.0,12772.0,3.0,-1.0,1.0 12786.0,-2.0,12787.0,1.0,1.0,-1.0 12790.0,2.0,12784.0,3.0,-6.0,6.0
需要实现:当combined列值为2时,取long列的值;当combined列值为-2时,取short列的值,生成新列calc。
方法1:使用numpy.where(最简洁)
import pandas as pd import numpy as np # 加载数据(假设已读取为DataFrame对象df) df = pd.read_csv("your_data_source.csv") # 按条件生成calc列 df['calc'] = np.where(df['combined'] == 2, df['long'], df['short']) # 可选:移除不需要的long、short列 df = df.drop(['long', 'short'], axis=1)
方法2:使用df.loc索引赋值
import pandas as pd df = pd.read_csv("your_data_source.csv") # 初始化calc列 df['calc'] = 0.0 # 按条件分别赋值 df.loc[df['combined'] == 2, 'calc'] = df['long'] df.loc[df['combined'] == -2, 'calc'] = df['short'] # 移除原long、short列 df = df.drop(['long', 'short'], axis=1)
执行后正确结果
value,combined,value_shifted,Sequence_shifted,calc 12834.0,2.0,12836.0,3.0,2.0 12813.0,-2.0,12781.0,-3.0,32.0 12830.0,2.0,12831.0,3.0,1.0 12809.0,-2.0,12803.0,-3.0,6.0 12822.0,2.0,12805.0,3.0,-17.0 12800.0,-2.0,12807.0,-3.0,-7.0 12773.0,2.0,12772.0,3.0,-1.0 12786.0,-2.0,12787.0,1.0,-1.0 12790.0,2.0,12784.0,3.0,-6.0
注:你提供的期望结果中部分值(如第6行的-1.0、第8行的-6.0、第9行的20.0)与原数据的逻辑规则不符,上述结果是严格按照给定规则生成的正确结果。
内容的提问来源于stack exchange,提问作者Show_man
相关产品推荐
相关产品推荐

