如何使用Pandas按列名子串合并列并执行OR逻辑运算?
实现按列名子串分组合并(OR逻辑)
嘿,这个需求用Pandas的分组功能就能轻松解决,我给你一步步演示怎么操作:
首先,先把你的示例数据构造出来,方便你直接验证代码:
import pandas as pd # 构造你给出的示例数据 data = { 'first_RG7509': [1], 'first_YY6124': [0], 'last_YY6124': [1], 'first_WE4818': [1], 'first_AA7542': [0], 'last_RG7509': [0] } dfin = pd.DataFrame(data)
接下来是核心操作:我们需要按列名拆分后的第二个子串作为分组依据,然后对每组的列应用OR逻辑(只要组内有一个1,结果就为1)。因为你的值是0/1,用max()函数就能完美实现OR的效果(取组内最大值,有1就返回1):
# 从列名中提取分组标识(比如RG7509、YY6124这些) group_ids = dfin.columns.str.split("_").str[1] # 按分组标识对列进行分组,用max实现OR合并 output_df = dfin.groupby(group_ids, axis=1).max()
运行这段代码后,你得到的output_df就是你想要的结果:
RG7509 YY6124 WE4818 AA7542 0 1 1 1 0
补充说明
如果你的数据里是布尔值(True/False),或者想更明确地体现OR逻辑,也可以用any()方法再转成整数:
output_df = dfin.groupby(group_ids, axis=1).any().astype(int)
效果和用max()完全一致,选哪种看你的习惯就好。
内容的提问来源于stack exchange,提问作者TobSta
相关产品推荐
相关产品推荐

