pivot 是 pandas 中的一个优雅的操作。
但是有没有什么方法可以将数据透视数据框合并回来?
让我举一个例子:
In [10]: df = pd.DataFrame([['a','2019', 1], ['b', '2019', 2], ['c', '2019',2], ['d','2019',3], ['e', '2009',1], ['f', '2012', 3]])
In [11]: df
Out[11]:
0 1 2
0 a 2019 1
1 b 2019 2
2 c 2019 2
3 d 2019 3
4 e 2009 1
5 f 2012 3
In [12]: df.columns = ['name', 'year', 'value1']
In [13]: df['value2'] = 4
In [14]: df
Out[14]:
name year value1 value2
0 a 2019 1 4
1 b 2019 2 4
2 c 2019 2 4
3 d 2019 3 4
4 e 2009 1 4
5 f 2012 3 4
这里我创建了一个数据框,然后我使用数据透视函数:
In [15]: a = df.pivot('name', 'year', 'value1')
Out[15]:
year 2009 2012 2019
name
a NaN NaN 1.0
b NaN NaN 2.0
c NaN NaN 2.0
d NaN NaN 3.0
e 1.0 NaN NaN
f NaN 3.0 NaN
In [16]: b = df.pivot('name', 'year', 'value2')
Out[16]:
year 2009 2012 2019
name
a NaN NaN 4.0
b NaN NaN 4.0
c NaN NaN 4.0
d NaN NaN 4.0
e 4.0 NaN NaN
f NaN 4.0 NaN
正如我所料,我有两个好的数据框,其中仅包含 value1 和 value2。
我的问题是:如何从 a
和 b
获取 df
?
有什么优雅的方法吗?
最佳答案
使用concat
与 DataFrame.stack
和 DataFrame.unstack
:
df = pd.concat([a.stack(), b.stack()], keys=('value1','value2')).unstack(0).reset_index()
print (df)
name year value1 value2
0 a 2019 1.0 4.0
1 b 2019 2.0 4.0
2 c 2019 2.0 4.0
3 d 2019 3.0 4.0
4 e 2009 1.0 4.0
5 f 2012 3.0 4.0
关于python - 如何从枢轴操作合并回数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65989510/