首页 > 解决方案 > 按列名中小数点前的数字合并列

问题描述

我有以下数据框(下面三个示例列):

import pandas as pd
array = {'25.2': [False, True, False], '25.4': [False, False, True], '27.78': [True, False, True]}
df = pd.DataFrame(array)


    25.2    25.4    27.78
0   False   False   True
1   True    False   False
2   False   True    True

我想创建一个具有合并列名称的新数据框,即将 25.2 和 25.4 添加到 25 个新列中。如果单独列中的值之一为 True,则新列中的值为 True。

预期输出:

      25     27
0   False   True
1   True    False
2   True    True

有任何想法吗?

标签: pandasdataframe

解决方案


使用rename()+ groupby()+ sum()

df=(df.rename(columns=lambda x:x.split('.')[0])
      .groupby(axis=1,level=0).sum().astype(bool))

或者

分两步:

df.columns=[x.split('.')[0] for x in df]
#OR
#df.columns=df.columns.str.replace(r'\.\d+','',regex=True)
df=df.groupby(axis=1,level=0).sum().astype(bool)

输出:

    25      27
0   False   True
1   True    False
2   True    True

注意:如果您有int列,则可以使用round()而不是split()


推荐阅读