python - 在 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
如果有人能指出我正确的方向,那就太棒了。
解决方案
您可以使用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 Number
和Name
:
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)
推荐阅读
- amazon-web-services - AWS SSM、AutoScalingGroup 和 LoadBalancer
- android - Android上的条码扫描?
- android - 获取相机/麦克风权限时出错 - 但已授予权限 - 带有 webview 的 Android Studio 应用
- r - 如何更好地控制 R Markdown 中的目录?
- json - Json 字符串应作为 Kafka 主题使用,在 Spark 结构化流中没有模式
- javascript - 在一个函数中使用 React useState 选择列表类型
- c# - 如何使用 C# 部署 Helm 3 图表
- angular - Safari 忽略角度动画计时功能
- azure-data-explorer - Kusto Query 从时间戳列中提取 mmm-yyyy
- android - Dagger2 Android DI - lateinit 属性尚未初始化