繁体   English   中英

对具有相同名称的pandas数据框中的列执行功能

[英]Perform a function on columns in pandas dataframe with the same name

我有一个包含111列的数据框,其中某些列具有相同的列名。 唯一列总数为27。

>>> has_2.head(6)
    Has_MCS_A      Has_MCS_A     Has_MCS_A      Has_MCS_A  \
           0              0              0              3   
           0              1              0              0   
           0              0              0              0   
           1              0              0              0   
           0              0              10             0   
           0              0              0              0   

    Has_MCS_B     Has_MCS_B         Has_MCS_B        Has_MCS_B  \
          0                0                0                6   
          0                0                0                0   
          0                9                0                0   
          10               0                0                0   
          0                0                0                0   
          0                0                7                0   

我想在这些列中使用相同的列名添加值。 所以最终结果应该是只有27列的数据框

您可以构造一个新的df并遍历唯一的列值,然后为每列逐行分配sum

In [21]:
import io
import pandas as pd
t="""Has_MCS_A      Has_MCS_A     Has_MCS_A      Has_MCS_A 
        0              0              0              3   
           0              1              0              0   
           0              0              0              0   
           1              0              0              0   
           0              0              10             0   
           0              0              0              0   """
df = pd.read_csv(io.StringIO(t), sep='\s+')
df

Out[21]:
   Has_MCS_A  Has_MCS_A.1  Has_MCS_A.2  Has_MCS_A.3
0          0            0            0            3
1          0            1            0            0
2          0            0            0            0
3          1            0            0            0
4          0            0           10            0
5          0            0            0            0

In [22]:    
# overwrite the columns to force duplicate names
df.columns = ['Has_MCS_A','Has_MCS_A','Has_MCS_A','Has_MCS_A']
df

Out[22]:
   Has_MCS_A  Has_MCS_A  Has_MCS_A  Has_MCS_A
0          0          0          0          3
1          0          1          0          0
2          0          0          0          0
3          1          0          0          0
4          0          0         10          0
5          0          0          0          0
In [23]:
# construct a new df
new_df = pd.DataFrame()
for col in df.columns.unique():
    new_df[col] = df[col].sum(axis=1)
new_df

Out[23]:
   Has_MCS_A
0          3
1          1
2          0
3          1
4         10
5          0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM