我有两个系列s1和s2,它们具有相同(不连续)的索引。如何将s1和s2组合为DataFrame中的两列,并将其中一个索引保留为第三列?
s1
s2
vnzz0bqm1#
我认为concat是一个很好的方法,如果它们存在,它会使用Series的name属性作为列(否则它只会给它们编号):
concat
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
70gysomp2#
如果两者具有相同的索引,则可以使用to_frame。
to_frame
〉= v0.23
v0.23
a.to_frame().join(b)
〈一米二米一英寸
a.to_frame().join(b.to_frame())
tf7tbtn23#
Pandas会自动将这些连续传递的数据对齐,并创建联合索引。它们在这里碰巧是相同的。reset_index将索引移动到一列。
reset_index
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
vmpqdwk34#
如果我可以回答这个问题。将系列转换为数据框的基本原理是了解
1.在概念层面上,数据框中的每一列都是一个系列。2.而且,每个列名都是Map到一个系列的键名。
如果你记住以上两个概念,你可以想到很多方法来转换系列到数据框。一个简单的解决方案将是这样的:在此处创建两个系列
import pandas as pd series_1 = pd.Series(list(range(10))) series_2 = pd.Series(list(range(20,30)))
创建仅包含所需列名的空数据框
df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])
使用Map概念将系列值放入数据框中
df['Column_name#1'] = series_1 df['Column_name#2'] = series_2
立即查看结果
df.head(5)
qfe3c7zg5#
示例代码:
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允许您使用Series作为值,列名作为键,从dict创建DataFrame。当它找到Series作为值时,它使用Series索引作为DataFrame索引的一部分。这种数据对齐是Pandas的主要优势之一。因此,除非您有其他需要,新创建的DataFrame有重复值,上例中data['idx_col']和data.index有相同的数据。
Series
dict
DataFrame
data['idx_col']
data.index
41ik7eoe6#
我不太明白你的问题,但这是你想做的吗?
pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)
(这里甚至不需要index=s1.index)
index=s1.index
jfewjypa7#
基于join()的解决方案简化:
join()
df = a.to_frame().join(b)
iugsix8n8#
如果您试图连接长度相等的Series,但它们的索引不匹配(这是常见的情况),那么连接它们将在它们不匹配的地方生成NA。
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会将旧索引保存在新 Dataframe 的一列中(为了简单起见,这里删除了索引)。
drop=False
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
pgpifvop9#
我用panda把我的numpy数组或iseries转换成一个 Dataframe ,然后按键添加额外的列作为“prediction”。如果你需要把 Dataframe 转换回列表,那么使用values.tolist()
output=pd.DataFrame(X_test) output['prediction']=y_pred list=output.values.tolist()
9条答案
按热度按时间vnzz0bqm1#
我认为
concat
是一个很好的方法,如果它们存在,它会使用Series的name属性作为列(否则它只会给它们编号):70gysomp2#
如果两者具有相同的索引,则可以使用
to_frame
。〉=
v0.23
〈一米二米一英寸
tf7tbtn23#
Pandas会自动将这些连续传递的数据对齐,并创建联合索引。它们在这里碰巧是相同的。
reset_index
将索引移动到一列。vmpqdwk34#
如果我可以回答这个问题。
将系列转换为数据框的基本原理是了解
1.在概念层面上,数据框中的每一列都是一个系列。
2.而且,每个列名都是Map到一个系列的键名。
如果你记住以上两个概念,你可以想到很多方法来转换系列到数据框。一个简单的解决方案将是这样的:
在此处创建两个系列
创建仅包含所需列名的空数据框
使用Map概念将系列值放入数据框中
立即查看结果
qfe3c7zg5#
示例代码:
Pandas允许您使用
Series
作为值,列名作为键,从dict
创建DataFrame
。当它找到Series
作为值时,它使用Series
索引作为DataFrame
索引的一部分。这种数据对齐是Pandas的主要优势之一。因此,除非您有其他需要,新创建的DataFrame
有重复值,上例中data['idx_col']
和data.index
有相同的数据。41ik7eoe6#
我不太明白你的问题,但这是你想做的吗?
(这里甚至不需要
index=s1.index
)jfewjypa7#
基于
join()
的解决方案简化:iugsix8n8#
如果您试图连接长度相等的Series,但它们的索引不匹配(这是常见的情况),那么连接它们将在它们不匹配的地方生成NA。
假设你不关心索引是否匹配,解决方案是在连接两个Series之前重新索引它们,如果
drop=False
是默认值,那么Pandas会将旧索引保存在新 Dataframe 的一列中(为了简单起见,这里删除了索引)。pgpifvop9#
我用panda把我的numpy数组或iseries转换成一个 Dataframe ,然后按键添加额外的列作为“prediction”。如果你需要把 Dataframe 转换回列表,那么使用values.tolist()