首页 > 解决方案 > 在 Pandas / Python 中组合从某一点开始的所有列

问题描述

它可能非常简单,但我无法在文档中找到正确的措辞。

我有一个数据框。

这个数据框是由我加载的电子表格创建的。有时电子表格有 Items1、Items2、Items3 作为列,有时它只有 Items1(这取决于客户订购的最大项目数量,每个项目都有自己的列。)。

我正在尝试将所有这些合并到一个主列“最终订单”中,该列将列出 Items1 ----> 最后一列的内容(我不想每次都输入此信息,我只想要代码来确定有多少列并且有多少列。)

例子:

Order Number  |  Name  |  Item1  |  Item2  |  Item3
 7571983219      Jim      Socks     Shoes      Hat

输出:

Order Number  |  Name  |  Item1  |  Item2  |  Item3 |  Final Order
 7571983219      Jim      Socks     Shoes      Hat     Socks,Shoes,Hat

如果有人能指出我正确的方向,那就太棒了。

标签: pythonpandas

解决方案


您可以使用apply

df['Final Order'] = df.iloc[:, 2:].apply(','.join, 1)
print(df)

输出

   Order Number Name  Item1  Item2 Item3      Final Order
0    7571983219  Jim  Socks  Shoes   Hat  Socks,Shoes,Hat

这假设最后n-2行是要加入的行。作为替代方案,您可以排除行Order NumberName

columns = [column for column in df.columns if column not in ["Order Number", "Name"]]
df['Final Order'] = df[columns].apply(','.join, 1)

表达方式:

','.join

是一个通过 连接字符串序列的函数,

如果您有缺失值,例如在下面的 DataFrame 中:

   Order Number Name  Item1 Item2 Item3 Final Order
0    7571983219  Jim  Socks   NaN   Hat   Socks,Hat

请执行下列操作:

df['Final Order'] = df[columns].apply(lambda x: ','.join(xi for xi in x if isinstance(xi, str)), 1)

推荐阅读