You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Dataframe中数组类型的ShoppingMonths列转为逗号分隔字符串

解决方案

1. 转换现有DataFrame的numpy数组列

你的ShoppingMonths列是numpy数组类型,只需用apply将每个数组转为逗号分隔的字符串即可:

import pandas as pd
import numpy as np

# 示例现有DataFrame
df = pd.DataFrame({
    'Customer': ['Jane', 'Rob'],
    'ShoppingMonths': [np.array([1,2]), np.array([0,12])]
})

# 转换为目标格式
df['ShoppingMonths'] = df['ShoppingMonths'].apply(lambda x: ', '.join(map(str, x)))

执行后df就会变成你想要的结构:

CustomerShoppingMonths
Jane1, 2
Rob0, 12

2. 优化ShoppingMonths列的创建逻辑

你当前用iterrows循环创建numpy数组的方式效率较低,且没必要转成numpy数组。可以直接生成逗号分隔的字符串,避免后续转换步骤:

假设你的原始数据包含JanShop、FebShop...等标识月份购物的列,可按以下方式生成目标列:

# 定义月份列与对应数字的映射(根据你的实际列名调整)
month_col_map = {
    'JanShop': 1,
    'FebShop': 2,
    'MarShop': 3,
    'AprShop': 4,
    'MayShop': 5,
    'JunShop': 6,
    'JulShop': 7,
    'AugShop': 8,
    'SepShop': 9,
    'OctShop': 10,
    'NovShop': 11,
    'DecShop': 12
}

# 生成ShoppingMonths列
df['ShoppingMonths'] = df.apply(
    lambda row: ', '.join(
        str(month_num) for col, month_num in month_col_map.items() if row[col] == 1
    ),
    axis=1
)

# 如果需要包含0的情况(比如Rob的0),可在逻辑中补充对应判断
# 示例:假设存在'NoShop'列,值为1时添加0
# df['ShoppingMonths'] = df.apply(
#     lambda row: ', '.join(
#         str(month_num) for col, month_num in month_col_map.items() if row[col] == 1
#     ) + (', 0' if row['NoShop'] == 1 else ''),
#     axis=1
# )

为什么之前的方法无效?

  • explode方法是将数组/列表拆分为多行,而非合并为字符串,不符合你的需求;
  • 单纯更改数据类型只是改变存储类型,不会将数组元素转为逗号分隔的文本格式。

内容的提问来源于stack exchange,提问作者milo204

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:55:19