【问题标题】:Perform a function on columns in pandas dataframe with the same name对 pandas 数据框中同名的列执行函数
【发布时间】:2015-09-14 09:04:46
【问题描述】:

我有一个包含 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 的吗?首先避免重复的列名可能更有意义
  • 这些列是不同财政年度的值。我使用正则表达式删除了这些值并创建了一个名称
  • 在创建列时合并值而不是将它们全部合并到单个 df 中然后必须对其进行排序难道不是有意义的吗?
  • @EdChum 数据框不是通过合并创建的。创建它的形式是呈现的形式
  • 您还没有发布数据结构的实际外观,例如,如果您有重复项,您在同一行上有多个值还是每个重复列只有 1 个行值,您需要发布更多信息

标签: python python-2.7 python-3.x pandas


【解决方案1】:

您可以构造一个新的 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

【讨论】:

    猜你喜欢
    • 2021-08-04
    • 1970-01-01
    • 2019-03-13
    • 2011-01-16
    • 1970-01-01
    • 2021-10-30
    • 2018-11-29
    • 2015-01-19
    • 2021-06-10
    相关资源
    最近更新 更多