python - 如何从枢轴操作合并回数据框?

标签 python pandas pivot

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。

我的问题是:如何从 ab 获取 df

有什么优雅的方法吗?

最佳答案

使用concatDataFrame.stackDataFrame.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/

相关文章:

python - Flask-Nav 条件元素

python - 具有两列列表的旋转数据框

mysql - 如何列出员工每周是否记录时间

Python DataFrame 未保存。如何永久分配呢?

SQL - 如何跨行转换和合并数据

python - 在 PyTorch 中计算 Conv2d 的输入和输出大小以进行图像分类

python - INSERT 语句错误 - MySQLdb/Python

python - 优先考虑 celery 队列/任务

python - 如何正确使用 pandas Series.map() 和映射字典?

python - 如何用字符串训练机器学习?