【问题标题】:rename columns according to list根据列表重命名列
【发布时间】:2021-11-01 15:21:34
【问题描述】:

我有3个数据框列表,我想根据它是否属于某个数据框列表为每列添加一个后缀。它全部按顺序排列,因此后缀列表中的第一项应附加到数据框的第一个列表中的数据框列等。我在这里尝试,但它将后缀列表中的每个项目添加到每一列。

在预期的输出中

  • cat_a 中 dfs 中的所有列都需要附加 group1
  • cat_b 中 dfs 中的所有列都需要附加 group2
  • cat_c 中 dfs 中的所有列都需要附加 group3

数据和代码在这里

df1, df2, df3, df4 = (pd.DataFrame(np.random.randint(0,10,size=(10, 2)), columns=('a', 'b')), 
                      pd.DataFrame(np.random.randint(0,10,size=(10, 2)), columns=('c', 'd')),
                      pd.DataFrame(np.random.randint(0,10,size=(10, 2)), columns=('e', 'f')),
                      pd.DataFrame(np.random.randint(0,10,size=(10, 2)), columns=('g', 'h')))

cat_a = [df1, df2]
cat_b = [df3, df4, df2]
cat_c = [df1]

suffix =['group1', 'group2', 'group3']
dfs = [cat_a, cat_b, cat_c]

for x, y in enumerate(dfs):
    for i in y:
        suff=suffix
        i.columns = i.columns + '_' + suff[x]

感谢观看!

【问题讨论】:

  • df1df2 映射到多个组是故意的吗?即他们应该有像这样的列名:col_group1_group2
  • 这是故意的。我知道这里并没有什么意义,但是有些列(和事实上的数据框)具有相同的名称。它并不理想,它只是以前存储方式的产物

标签: python pandas dataframe


【解决方案1】:

Brian Joseph's answer 很棒*,但我想指出您非常接近,您只是没有正确重命名列。你的最后一行应该是这样的:

i.columns = [col + '_' + suff[x] for col in i.columns]

而不是这个:

i.columns = i.columns + '_' + suff[x]

【讨论】:

    【解决方案2】:

    假设您希望某些数据帧有多个后缀,我认为这就是您想要的?:

    suffix_mapper = {
        'group1': [df1, df2],
        'group2': [df3, df4, df2],
        'group3': [df1]
    }
    
    for suffix, dfs in suffix_mapper.items():
        for df in dfs:
            df.columns = [f"{col}_{suffix}" for col in df.columns]
    

    【讨论】:

    • 我的代码做到了,但我只希望每个数据帧有一个后缀 - 我需要假设数据帧,根据它们在列表中的位置,实际上彼此无关
    • 大声笑,但我只是在上面问过?所以听起来真正的问题是让这个后缀映射正确吗?我是否正确假设 df1 应该有后缀 group3 而不是 group1 因为它在后缀排序中更早出现?如果您在原始问题中为某些数据框添加了一些您期望的确切后缀示例,将会很有帮助。
    【解决方案3】:

    我认为问题在于您没有获取数据帧的副本,因此每个 cat 数据帧都多次引用 df 数据帧。

    试试:

    cat_a = [df1.copy(), df2.copy()]
    cat_b = [df3.copy(), df4.copy(), df2.copy()]
    cat_c = [df1.copy()]
    

    【讨论】:

      猜你喜欢
      • 2022-08-09
      • 2021-02-03
      • 2019-06-11
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 2021-04-23
      • 2021-03-08
      相关资源
      最近更新 更多