Combining two Series into a DataFrame in pandas
我有两个具有相同(非连续)索引的Series
我认为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1') In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2') In [3]: pd.concat([s1, s2], axis=1) Out[3]: s1 s2 A 1 3 B 2 4 In [4]: pd.concat([s1, s2], axis=1).reset_index() Out[4]: index s1 s2 0 A 1 3 1 B 2 4 |
注意:这延伸到2系以上。
Pandas会自动对齐这些传递的序列并创建联合索引
它们恰好在这里相同。
1 2 3 4 5 6 7 8 9 10 11 12 | In [2]: s1 = Series(randn(5),index=[1,2,4,5,6]) In [4]: s2 = Series(randn(5),index=[1,2,4,5,6]) In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index() Out[8]: index s1 s2 0 1 -0.176143 0.128635 1 2 -1.286470 0.908497 2 4 -0.995881 0.528050 3 5 0.402241 0.458870 4 6 0.380457 0.072251 |
如果两者具有相同的索引,为什么不使用.to_frame?
> =
1 | a.to_frame().join(b) |
<<十二
1 | a.to_frame().join(b.to_frame()) |
示例代码:
1 2 3 | a = pd.Series([1,2,3,4], index=[7,2,8,9]) b = pd.Series([5,6,7,8], index=[7,2,8,9]) data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index}) |
Pandas允许您从
如果我可以回答这个问题。
将系列转换为数据框架的基本原理是要理解这一点
1.在概念层面,数据框中的每一列都是一个系列。
并且,每个列名都是映射到系列的键名。
如果牢记两个概念,可以考虑将系列转换为数据框的许多方法。
一个简单的解决方案是这样的:
在这里创建两个系列
1 2 3 4 5 | import pandas as pd series_1 = pd.Series(list(range(10))) series_2 = pd.Series(list(range(20,30))) |
使用所需的列名创建一个空数据框
1 | df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1']) |
使用映射概念将系列值放在数据框内
1 2 3 | df['Column_name#1'] = series_1 df['Column_name#2'] = series_2 |
现在检查结果
1 | df.head(5) |
我不确定我完全理解你的问题,但这是你想要做的吗?
1 | pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index) |
(这里甚至不需要
基于
1 | df = a.to_frame().join(b) |