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

如何合并DataFrame中同月份日期列并以逗号拼接对应值

实现DataFrame按月份合并日期列并拼接价格值

没问题,这个需求很好实现!你已经找对了方向——用groupby来按月份分组,只要把求和换成自定义的字符串拼接逻辑就行。我给你两种直观的实现方案,都能得到你想要的输出:

方法一:用melt+pivot实现长格式转宽格式

这种方法逻辑清晰,适合新手理解:

  1. 先把宽格式的数据转成长格式(melt),方便按产品和月份分组
  2. 分组后用字符串拼接合并价格
  3. 再转回宽格式(pivot)得到最终结果
import pandas as pd

# 示例输入数据(和你的需求一致)
data = pd.DataFrame({
    'product': ['A', 'B'],
    '05-Oct-2020': [66.2, 368.7],
    '07-Oct-2020': [69.5, 382.8],
    '09-Nov-2020': [72.95, 384.7],
    '13-Nov-2020': [76.55, 386.8]
})

# 1. 转换为长格式:把日期列拆成"月份年份"和"价格"两列
melted_data = data.melt(
    id_vars='product',  # 保留product作为标识列
    var_name='month_year',  # 原日期列名重命名为月份年份
    value_name='price'  # 价格列的名称
)

# 2. 解析月份年份格式(确保统一),然后分组拼接价格
melted_data['month_year'] = pd.to_datetime(
    melted_data['month_year'], 
    format="%d-%b-%Y"
).strftime("%b-%Y")

# 分组后,把每个组的价格转成字符串,用", "拼接
grouped = melted_data.groupby(['product', 'month_year'])['price'].apply(
    lambda x: ', '.join(map(str, x))
).unstack()  # 把月份年份转成列

# 3. 重置索引,让product回到列的位置
final_result = grouped.reset_index()
print(final_result)

方法二:按你的思路用转置+groupby实现

如果你更倾向于用转置后分组的方式,也可以这样写:

import pandas as pd

# 示例数据同上
data = pd.DataFrame({
    'product': ['A', 'B'],
    '05-Oct-2020': [66.2, 368.7],
    '07-Oct-2020': [69.5, 382.8],
    '09-Nov-2020': [72.95, 384.7],
    '13-Nov-2020': [76.55, 386.8]
})

# 1. 设置product为索引,然后转置数据
transposed = data.set_index('product').T

# 2. 把转置后的索引(原日期列名)转换为月份年份格式
transposed.index = pd.to_datetime(
    transposed.index, 
    format="%d-%b-%Y"
).strftime("%b-%Y")

# 3. 按月份年份分组,拼接价格字符串
grouped = transposed.groupby(level=0).agg(
    lambda x: ', '.join(map(str, x))
)

# 4. 再次转置回来,重置索引得到最终结果
final_result = grouped.T.reset_index()
print(final_result)

关键说明

  • 为什么用lambda x: ', '.join(map(str, x))?
    groupby后的sum()是数值求和,而我们需要把每个组里的价格值转成字符串,再用逗号加空格连接起来。map(str, x)把每个float类型的价格转成字符串,', '.join()负责拼接。
  • 用pd.to_datetime比手动strptime更稳妥:它能自动处理大部分日期格式,而且出错时会给出清晰的提示。

两种方法运行后都会得到你期望的输出:

productOct-2020Nov-2020
A66.2, 69.572.95, 76.55
B368.7, 382.8384.7, 386.8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:42:43