合并具有不同索引的熊猫系列(对齐一个索引)

Posted

技术标签:

【中文标题】合并具有不同索引的熊猫系列(对齐一个索引)【英文标题】:Merge pandas series with different index (align on one index) 【发布时间】:2018-09-17 04:25:12 【问题描述】:

我有来自不同熊猫系列的结果,最终形成 1x1 系列。现在我想将它们全部合并到一个 1xN 行。它们中的每一个都可以有不同的索引。

我可以为它们中的每一个重置索引并创建一个新的数据框。但是,我想知道是否有比这更快/更简单的方法。

edit1:添加数据和所需的输出样本

A
326    0.005077
dtype: float64

date
4300   2011-01-18 16:00:00
Name: datetime, dtype: datetime64[ns]

B
5    0.004077
dtype: float64

我想要类似的东西:

Index                    A            B
2011-01-18 16:00:00    0.005077     0.004077

我想要这个的原因:程序运行一个循环并返回多个上述 1xN 行,如果日期不同,我想将这些行相互附加,或者如果日期(索引)相同,则将值相加(可以如下所示完成:Loop: Results to be updated via += if on the same date, otherwise write next line

edit2:抱歉,我的代码中有一些例外情况,我必须设置某些系列对象 = 0。有什么方法可以将它包含在下面的一个衬里中,还是我需要将 pd.series 从我的零中取出?

【问题讨论】:

可以添加数据样本和预期输出吗? 你认为另一个C 系列与0 吗?然后df = pd.DataFrame([np.concatenate([A, B, C])], columns=['A','B', 'C'], index=date) should working nice print (df) 答案已编辑。 嗯,所以 C 有时应该是 one value Series 有时是标量? 或更具体的C = C if isinstance(C, pd.Series) else pd.Series([C]) 【参考方案1】:

我认为需要:

A = pd.Series([0.005077], index=[326])
date = pd.Series(['2011-01-18 16:00:00'], index=[4300])
B = pd.Series([ 0.004077], index=[5])

df = pd.DataFrame([np.concatenate([A, B])], columns=['A','B'], index=date)
print (df)
                            A         B
2011-01-18 16:00:00  0.005077  0.004077

编辑:

对于标量是必要的,创建一个项目列表:

A = pd.Series([0.005077], index=[326])
date = pd.Series(['2011-01-18 16:00:00'], index=[4300])
B = pd.Series([ 0.004077], index=[5])
C = 0

df = pd.DataFrame([np.concatenate([A, B, [C] ])], columns=['A','B','C'], index=date)
print (df)
                            A         B    C
2011-01-18 16:00:00  0.005077  0.004077  0.0

【讨论】:

结果 df 为 Nx1。只是一个建议。 谢谢,jezrael 和 Rao Sahab。对我来说是这样吗:df = pd.concat([A, B]).to_frame([date]).T? @jezrael 你能添加设置索引以满足他的要求吗 @eternity1 - 也适合你!

以上是关于合并具有不同索引的熊猫系列(对齐一个索引)的主要内容,如果未能解决你的问题,请参考以下文章

熊猫合并具有相同值和相同索引的行

合并具有非唯一索引的多个熊猫数据集

将具有相同索引的熊猫系列列表转换为字典

熊猫合并索引不起作用

对索引熊猫系列进行排序时出错

基于索引从大熊猫系列列表中提取到另一个大熊猫系列