如何基于多条件对DataFrame不同行的Number列执行求和操作?
可以实现,具体解决方案如下
首先,我们可以通过拆分数据、检查字符串反转条件、累加数值这几个步骤完成需求:
- 导入依赖并创建DataFrame
import pandas as pd dataset = { 'String': ["ABCDEF","HIJABC","ABCHIJ","DEFABC"], 'Bool':[True,True,False,False], 'Number':[10,20,40,50]} df = pd.DataFrame(dataset)
- 定义字符串反转函数
用于判断两行字符串是否互为反转:
def reverse_string(s): return s[::-1]
- 拆分True和False行并重置索引
将原DataFrame拆分为布尔值为True和False的两组,重置索引方便一一配对处理:
true_df = df[df['Bool']].reset_index(drop=True) false_df = df[~df['Bool']].reset_index(drop=True)
- 按条件累加数值
遍历每一对True和False行,若两者字符串不互为反转,则将False行的Number值加到对应True行的Number上:
for i in range(len(true_df)): true_str = true_df.loc[i, 'String'] false_str = false_df.loc[i, 'String'] if true_str != reverse_string(false_str): true_df.loc[i, 'Number'] += false_df.loc[i, 'Number']
- 合并结果并还原原索引
将处理后的True行和原False行合并,还原为原DataFrame的索引顺序:
result = pd.concat([true_df, false_df]).reindex(df.index) print(result)
执行上述代码后,输出结果与你期望的一致:
String Bool Number 0 ABCDEF True 50 1 HIJABC True 70 2 ABCHIJ False 40 3 DEFABC False 50
内容的提问来源于stack exchange,提问作者the phoenix
相关产品推荐
相关产品推荐

