我有两个具有相同(不连续)指标的级数s1和s2。我如何结合s1和s2是一个DataFrame的两列,并保持一个索引作为第三列?
当前回答
基于join()的解决方案的简化:
df = a.to_frame().join(b)
其他回答
基于join()的解决方案的简化:
df = a.to_frame().join(b)
我认为concat是一个很好的方法。如果它们存在,它使用Series的name属性作为列(否则它只是简单地为它们编号):
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系列以上。
如果您试图连接长度相等但它们的索引不匹配的Series(这是一种常见的情况),那么连接它们将在它们不匹配的地方生成NAs。
x = pd.Series({'a':1,'b':2,})
y = pd.Series({'d':4,'e':5})
pd.concat([x,y],axis=1)
#Output (I've added column names for clarity)
Index x y
a 1.0 NaN
b 2.0 NaN
d NaN 4.0
e NaN 5.0
假设您不关心索引是否匹配,解决方案是在连接两个Series之前重新索引它们。如果drop=False,这是默认值,那么Pandas将把旧索引保存在新数据框架的一列中(为了简单起见,这里省略了索引)。
pd.concat([x.reset_index(drop=True),y.reset_index(drop=True)],axis=1)
#Output (column names added):
Index x y
0 1 4
1 2 5
示例代码:
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允许您从字典中创建一个DataFrame,其值为Series,键为列名。当它找到一个Series作为值时,它使用Series索引作为DataFrame索引的一部分。这种数据对齐是Pandas的主要优势之一。因此,除非您有其他需要,否则新创建的DataFrame具有重复的值。在上面的例子中,data['idx_col']与data.index拥有相同的数据。
如果两者有相同的索引,为什么不直接使用.to_frame呢?
> = v0.23
a.to_frame().join(b)
< v0.23
a.to_frame().join(b.to_frame())
推荐文章
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- 蟒蛇导出环境文件
- Django - makemigrations -未检测到任何更改
- SQLAlchemy:引擎、连接和会话差异
- 在Python Pandas中删除多个列中的所有重复行
- 更改pandas DataFrame中的特定列名
- 将Pandas多索引转换为列
- 熊猫在每组中获得最高的n个记录
- 熊猫数据帧得到每组的第一行