【问题标题】:Transforming multiple data frame columns into one series将多个数据框列转换为一个系列
【发布时间】:2020-02-07 20:49:31
【问题描述】:

我有一个数据集 df(250,3) 250 个原始数据和三列。我想编写一个循环,将我的数据框中每一列的内容合并为一个包含 250 个原始数据和 1 个列“df_single”的系列(250,1)。手动操作如下:

df_single = df['color']+" "+df['model']+" "+df['size']

如何使用 for 循环或非手动创建 df_single?

我尝试用 TypeError 编写这段代码

df_conc=[]
for var in cols:
    cat_list=df_code_part[var]
    df_conc = df_conc+" "+cat_list

TypeError:只能将列表(不是“str”)连接到列表

【问题讨论】:

  • 你想要总和吗?
  • @Annalix 你可以使用df.itertuples()df.iterrows()
  • 我认为他不需要循环
  • 答案有问题 - 您需要concatenate 的所有DataFrame 列还是只需要列表中指定的某些列?
  • 我需要在 df_single = df['colour']+" "+df['model']+" "+df['size'] 中求和,但是一般的方式和空间。

标签: python-3.x pandas for-loop


【解决方案1】:

我认为如果需要加入 3 列,那么您的解决方案非常好:

df_single = df['colour']+" "+df['model']+" "+df['size']

如果需要针对许多列的通用解决方案,请使用 DataFrame.astype 转换为字符串,如有必要,使用 DataFrame.add 添加空格,sum 用于连接,最后通过 Series.str.rstrip 删除跟踪空白:

cols = ['color','model','size']
df_single = df[cols].astype(str).add(' ').sum(axis=1).str.rstrip()

或者:

df_single = df[cols].astype(str).apply(' '.join, axis=1)

【讨论】:

  • 您的解决方案也不正确,直觉上他不想写列的名称,这就是他想使用循环的原因。他不知道 sum 可以使用什么 (axis = 1)
  • 你确定 cols 不是所有的列吗?
  • "在代码中使用 var in cols: - 所以你错了".?
【解决方案2】:

如果你想在列之间有空格,运行:

df.apply(' '.join, axis=1)

“普通”df.sum(axis=1) 连接所有列,但没有 它们之间的空格。

【讨论】:

    【解决方案3】:

    如果你想要总和你需要使用:

    df_single=df.astype(str).add(' ').sum(axis=1).str.rstrip()
    

    如果您不想添加所有列,则需要先选择它们:

    columns=['colour','model','size']
    df_single=df[columns].astype(str).add(' ').sum(axis=1).str.rstrip()
    

    【讨论】:

    • 在这种情况下,我需要添加所有列。但我的问题主要是关于如何概括手册 +" "+ 。我看到它与apply(''.join,axis = 1)或add('').sum(axis = 1).str.rstrip()有关。谢谢!
    • @Annalix - 添加到我的答案中。
    猜你喜欢
    • 2019-02-19
    • 2022-01-02
    • 2020-09-10
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2019-03-22
    • 2022-08-13
    • 1970-01-01
    相关资源
    最近更新 更多