我正在尝试转换从外部API提取的数据。到目前为止,我的数据框看起来像这样:
Country Date Team Rating
United Kingdom 11/8/2019 Team A 95
United Kingdom 2/20/2019 Team B 90
United Kingdom 9/22/2017 Team A 90
United Kingdom 6/28/2016 Team B 90
United Kingdom 6/27/2016 Team C 90
United Kingdom 6/24/2016 Team A 95
United Kingdom 6/12/2015 Team C 100
United Kingdom 6/13/2014 Team C 100
United Kingdom 4/19/2013 Team B 95
United Kingdom 2/22/2013 Team A 95
United Kingdom 12/13/2012 Team C 100
United Kingdom 3/14/2012 Team B 100
United Kingdom 2/13/2012 Team A 100
United Kingdom 10/26/2010 Team C 100
United Kingdom 5/21/2009 Team C 100
United Kingdom 9/21/2000 Team B 100
United Kingdom 9/21/2000 Team B 100
United Kingdom 8/10/1994 Team B 100
United Kingdom 6/26/1989 Team C 100
United Kingdom 4/28/1978 Team C 100
United Kingdom 3/31/1978 Team A 100
我希望它看起来像这样,但是我正在努力弄清楚(我对数据帧还是陌生的)怎么做:
Country Date Team A Team B Team C
United Kingdom 11/8/2019 95 90 90
United Kingdom 2/20/2019 90 90 90
United Kingdom 9/22/2017 90 90 90
United Kingdom 6/28/2016 95 90 90
United Kingdom 6/27/2016 95 95 90
United Kingdom 6/24/2016 95 95 100
United Kingdom 6/12/2015 95 95 100
United Kingdom 6/13/2014 95 95 100
United Kingdom 4/19/2013 95 95 100
United Kingdom 2/22/2013 95 100 100
United Kingdom 12/13/2012 100 100 100
United Kingdom 3/14/2012 100 100 100
United Kingdom 2/13/2012 100 100 100
United Kingdom 10/26/2010 100 100 100
United Kingdom 5/21/2009 100 100 100
United Kingdom 9/21/2000 100 100 100
United Kingdom 9/21/2000 100 100 100
United Kingdom 8/10/1994 100 100 100
United Kingdom 6/26/1989 100 100 100
United Kingdom 4/28/1978 100 100 100
United Kingdom 3/31/1978 100 100 100
因此,从本质上讲,我希望国家和日期列保持不变,但是相对于每行只有一个团队,我希望所有团队都显示为列。我希望不要使用空白值,而要使用未更新的值。
例如,对于11/8/2019,您可以在我的原始df中看到只有A队的等级发生变化。对于“团队B”和“团队C”列,我希望他们使用以前的值(如果未更新)。
有人有什么建议吗?
答案 0 :(得分:1)
首先,如果您需要对日期时间进行排序,我建议您使用日期的private static final Logger log = LoggerFactory.getLogger("checks");
字符串表示形式(例如,第一条记录使用YYYYMMDD
)或使用实际的{{1 }}数据类型。使用美式表示法会造成混淆,并且很难进行排序。
无论如何,要解决您的问题,我建议您先使用熊猫pivot
函数,然后使用 fill NaN (即fillna
)函数和回填(即20191108
)方法。
编辑:如果您想保留datetime
列,似乎将它与bfill
列一起用作多索引将无法与Country
一起使用。您可以做的是保留原始的Date
并将其与新的pivot
列一起加入。
df
答案 1 :(得分:1)
基本上,您需要的是:
data.pivot_table(index=['Country', 'Date'], columns='Team', values='Rating').reset_index()\
.sort_values(['Country', 'Date'], ascending=False).fillna(method='bfill', axis=0)
它将创建一个pivot_table
,以不规则的顺序对值进行排序,并在缺少的地方提取最后存在的值。