[英]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.