我正在尝试从一堆数据框中选择一堆单行,并尝试通过将它们连接在一起来创建一个新的数据框。
这是一个简单的例子
x=pd.DataFrame([[1,2,3],[1,2,3]],columns=["A","B","C"])
A B C
0 1 2 3
1 1 2 3
a=x.loc[0,:]
A 1
B 2
C 3
Name: 0, dtype: int64
b=x.loc[1,:]
A 1
B 2
C 3
Name: 1, dtype: int64
c=pd.concat([a,b])
I end up with this:
A 1
B 2
C 3
A 1
B 2
C 3
Name: 0, dtype: int64
Whearas,我希望原始的数据帧是
A B C
0 1 2 3
1 1 2 3
我可以获取值并创建一个新的数据框,但这似乎不是实现它的方法。
答案 0 :(得分:2)
如果要垂直合并两个系列(垂直堆叠),则一个选项是concat
并转置。
另一个人正在使用np.vstack
:
pd.DataFrame(np.vstack([a, b]), columns=a.index)
A B C
0 1 2 3
1 1 2 3
答案 1 :(得分:2)
您似乎想从一组记录中创建一个新的数据框。有一种方法可以实现:
import pandas as pd
x = pd.DataFrame([[1,2,3],[1,2,3]], columns=["A","B","C"])
a = x.loc[0,:]
b = x.loc[1,:]
c = pd.DataFrame.from_records([a, b])
print(c)
# A B C
# 0 1 2 3
# 1 1 2 3
答案 2 :(得分:1)
由于您要按index
进行切片,因此我将使用.iloc
,然后注意[[]]
和[]
之间的区别,它们返回一个DataFrame
和{{ 1}} *
Series
要仍然使用a = x.iloc[[0]]
b = x.iloc[[1]]
pd.concat([a, b])
# A B C
#0 1 2 3
#1 1 2 3
,您可以做类似的事情
.loc
*有一个小警告,如果在a = x.loc[[0,]]
b = x.loc[[1,]]
中复制索引0,那么x
将返回x.loc[0,:]
而不是DataFrame
。