【问题标题】:How do you stack two Pandas Dataframe columns on top of each other?如何将两个 Pandas Dataframe 列堆叠在一起?
【发布时间】:2015-02-15 07:27:27
【问题描述】:
是否有将两个 Pandas 数据框列堆叠在一起的库函数或正确方法?
例如将 4 列变成 2:
a1 b1 a2 b2
1 2 3 4
5 6 7 8
到
c d
1 2
5 6
3 4
7 8
我阅读的大部分 Pandas 数据框文档仅涉及连接行和进行行操作,但我确信必须有一种方法来完成我所描述的操作,而且我确信它非常简单。
任何帮助都会很棒。
【问题讨论】:
标签:
python
pandas
dataframe
data-analysis
【解决方案1】:
您可以使用pandas.DataFrame.iloc 选择前两列和后两列。然后,将两个部分的列名更改为c 和d。之后,您可以使用pandas.concat 加入他们。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(1, 9).reshape((2, 4)),
columns=["a1", "b1", "a2", "b2"])
part1 = df.iloc[:,0:2]
part2 = df.iloc[:,2:4]
new_columns = ["c", "d"]
part1.columns = new_columns
part2.columns = new_columns
print pd.concat([part1, part2], ignore_index=True)
这给了你:
c d
0 1 2
1 5 6
2 3 4
3 7 8
【解决方案2】:
我会做以下事情
import pandas as pd
df = pd.DataFrame({'a1' : pd.Series([1,5]), 'b1' : pd.Series([2,6]), 'a2' : pd.Series([3,7]), 'b2' : pd.Series([4,8])})
df1 = df[['a1','b1']]
df2 = df[['a2','b2']]
df1.columns = ['c','d']
df2.columns = ['c','d']
df1.append(df2)
我刚刚看到@Carsten 也回答了这个问题,我也同意他的回答
【解决方案3】:
或者,使用melt:
# Make data as in previous answers
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(1, 9).reshape((2, 4)),
columns=["a1", "b1", "a2", "b2"])
# Melt both columns and concatenate
df = pd.concat([
df[['a1', 'a2']].melt(value_name='c'),
df[['b1', 'b2']].melt(value_name='d')],
axis=1)
# Discard unwanted columns melt creates
df = df[['c', 'd']]