python - 在 Pandas/Python 中合并从一个点开始的所有列

标签 python pandas

它可能非常简单,但我只是找不到正确的措辞来在文档中搜索。

我有一个数据框。

此数据框是由我加载的电子表格创建的。有时电子表格有 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

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

最佳答案

您可以使用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)

关于python - 在 Pandas/Python 中合并从一个点开始的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65135112/

相关文章:

python - 如何从 panda 数据框中的字符串中提取最后日期

python - Pandas 如何通过正则表达式从列提取到多行?

python - 使用 python requests 和 BeatifulSoup 在维基百科页面上抓取多个表及其标题?

python - apt-get 在 bash 脚本中没有按预期工作

python - 使用 nginx 和 gunicorn 运行 flask 应用程序

python pandas read_csv 如何解析微秒

python - Pandas 混合值列到字符串

python - 如何使用 SymPy 加速符号集成?

python - 如何在 Python OpenPyXL 中更改字体大小

python - 在 Python 函数中使用大数据结构时的效率