Pandas:如何在数据透视表数据框中仅添加最新日期

Posted

技术标签:

【中文标题】Pandas:如何在数据透视表数据框中仅添加最新日期【英文标题】:Pandas: How to extra only latest date in pivot table dataframe 【发布时间】:2018-01-17 16:03:07 【问题描述】:

如何根据图片中的数据透视表创建一个新的数据框,该数据框仅包含每个“天”的“txn_date”列的最新日期作为索引? 谢谢

【问题讨论】:

【参考方案1】:
d1 = pd.to_datetime(['2016-06-25'] *2 + ['2016-06-28']*4)
df = pd.DataFrame('txn_date':pd.date_range('2012-03-05 10:20:03', periods=6),
                   'B':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'day':d1).set_index(['day','txn_date'])

print (df)
                                B  C  D  E
day        txn_date                       
2016-06-25 2012-03-05 10:20:03  4  7  1  5
           2012-03-06 10:20:03  5  8  3  3
2016-06-28 2012-03-07 10:20:03  4  9  5  6
           2012-03-08 10:20:03  5  4  7  9
           2012-03-09 10:20:03  5  2  1  2
           2012-03-10 10:20:03  4  3  0  4

1.

如果需要,我认为您首先需要sort_index,然后按级别day 和聚合last groupby

df1 = df.sort_index().reset_index(level=1).groupby(level='day').last()
print (df1)
                      txn_date  B  C  D  E
day                                       
2016-06-25 2012-03-06 10:20:03  5  8  3  3
2016-06-28 2012-03-10 10:20:03  4  3  0  4

2.

boolean indexingduplicated 过滤:

#if necessary
df = df.sort_index()
df2 = df[~df.index.get_level_values('day').duplicated(keep='last')]
print(df2)
                                B  C  D  E
day        txn_date                       
2016-06-25 2012-03-06 10:20:03  5  8  3  3
2016-06-28 2012-03-10 10:20:03  4  3  0  4

【讨论】:

很高兴能帮上忙!还有一个对未来的小建议 - Don't post images of code (or links to them)。祝你好运!

以上是关于Pandas:如何在数据透视表数据框中仅添加最新日期的主要内容,如果未能解决你的问题,请参考以下文章

具有多索引的 Pandas 子数据透视表和总数据透视表

如何在熊猫数据框中仅针对 dtype bool 列将 True 和 False 映射为“是”和“否”?

如何使用 Pandas 中的数据透视表计算标准差?

如何在庞大的 Pandas 数据框中拆分日、时、分和秒数据?

python数据透视表 - 列是日期,应该正确排序

如何在 Pandas 数据框中按行值对日期时间列进行排序?