Python 按组转置数字列
生成测试数据的代码Python 按组转置数字列,python,pandas,pivot,pivot-table,transpose,Python,Pandas,Pivot,Pivot Table,Transpose,生成测试数据的代码 import pandas as pd dftest = pd.DataFrame({'Amt': {0: 60, 1: 35.0, 2: 30.0, 3: np.nan, 4: 25}, 'Year': {0: 2012.0, 1: 2012.0, 2: 2012.0, 3: 2013.0, 4: 2013.0}, 'Name': {0: 'A', 1: 'A', 2: 'C',
import pandas as pd
dftest = pd.DataFrame({'Amt': {0: 60, 1: 35.0, 2: 30.0, 3: np.nan, 4: 25},
'Year': {0: 2012.0, 1: 2012.0, 2: 2012.0, 3: 2013.0, 4: 2013.0},
'Name': {0: 'A', 1: 'A', 2: 'C', 3: 'A', 4: 'B'}})
给予
列Amt
最多有2个值对应于组['Name','Year']
。我想旋转/转置,以便输出的形式
Name Year Amt1 Amt2
0 A 2012 35 60
2 C 2012 30 NaN
3 A 2013 NaN NaN
4 B 2013 25 NaN
我试过使用pivot、unstack、pivot_表
我真正想做的是确保每个
['Name','Year']
(NA
)有两个Amt
值(NA
),我可以通过叠加所需的输出来实现这一点使用groupby
和apply
f = lambda x: x.sort_values(ascending=True).reset_index(drop=True)
dftest.groupby(['Name', 'Year']).Amt.apply(f).unstack()
我猜你会希望第一排的Amt1为60,Amt2为35。你想让它们先排序吗?我更喜欢按升序排序,这很简单,我想你现在可以忽略它
f = lambda x: x.sort_values(ascending=True).reset_index(drop=True)
dftest.groupby(['Name', 'Year']).Amt.apply(f).unstack()