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

如何将两个键不同的Pandas Series合并为一个Pandas DataFrame

合并索引不同的Pandas Series为指定列名的DataFrame并丢弃索引

问题代码

from datetime import datetime, timedelta
import pandas as pd

now= datetime.now()
time1= pd.Timestamp(now.year, now.month, now.day)- timedelta(days=1)
time2= pd.Timestamp(now.year, now.month, now.day)- timedelta(days=2)

data1= {time1:1}
data2= {time2:2}

series1 =pd.Series(data1)
series2 =pd.Series(data2)

print(series1)
print(series2)

merged= pd.DataFrame()
merged= pd.concat(series1,series2)
print(merged)

问题需求

两个Pandas Series的索引(日期)不同,要合并成一个DataFrame,最终结果要有column1和column2两列,只保留Series里的数值1和2,完全去掉原有的日期索引。之前用pd.concat合并没得到预期结果。

解决方案

方法1:直接提取值构造DataFrame(适合单值Series)

既然每个Series里只有一个值,直接把值取出来构造DataFrame就行,完全不用管原索引:

# 提取Series中的数值
val1 = series1.iloc[0]
val2 = series2.iloc[0]

# 生成目标DataFrame
merged = pd.DataFrame({'column1': [val1], 'column2': [val2]})
print(merged)

输出结果:

column1  column2
0        1        2

方法2:重置索引后合并(适合多值Series)

如果你的Series可能有多个数值,先把原日期索引去掉,再合并成列:

# 重置索引丢弃日期,同时给列重命名
series1_reset = series1.reset_index(drop=True).rename('column1')
series2_reset = series2.reset_index(drop=True).rename('column2')

# 按列合并成DataFrame
merged = pd.concat([series1_reset, series2_reset], axis=1)
print(merged)

输出结果和上面一致,也能满足需求。

原代码出错原因

你之前写的pd.concat(series1, series2)是用法错误,pd.concat要求第一个参数是序列(比如把两个Series放进列表),就算改成pd.concat([series1, series2]),因为两个Series索引不一样,合并后会出现NaN值,而且是按行堆叠,不是分成两列,还带着原日期索引,完全不符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:10:08