如何展平具有相同 id 的多行的 pandas 数据框

Posted

技术标签:

【中文标题】如何展平具有相同 id 的多行的 pandas 数据框【英文标题】:How can I flatten a pandas data frame with several rows with the same id 【发布时间】:2019-02-25 05:28:44 【问题描述】:

我怎样才能像下面这样展平熊猫数据框:

id               date            var1
058a219119825  2015-01-01      0.9             
058a219119825  2015-02-01      0.3         
058a219119825  2015-03-01      0.1
....
058a219119826  2015-01-01      0.1
058a219119826  2015-02-01      0.5
058a219119826  2015-03-01      0.4

关于数据框的一些信息:有以下数量的带有日期的唯一条目(id):

  date       number of unique id's
2015-01-01    16070
2015-02-01    16082
2015-03-01    16074
2015-04-01    16079
2015-05-01    16080
2015-06-01    16085
2015-07-01    16090
2015-08-01    16094
2015-09-01    16082
2015-10-01    16085
2015-11-01    16087
2015-12-01    16094

我想要类似于此命令对 json 文件所做的操作:

flattened = (flatten(entry) for entry in json_data)

问题是现在,我在数据框中有数据。我的一个想法是使用 var 和日期创建一个新列,然后删除日期列。例如:

id           var1_2015-01-01 var1_2015-02-01 var1_2015-03-01
058a219119825        0.9             0.3           0.1

此外,由于某些 id 不会包含所有 12 个不同的日期(每月 1 个),我正在考虑为不存在日期中的那些缺失 var1 值添加一个“缺失值”字符串。如何使用 Pandas 做到这一点?

【问题讨论】:

新数据框中的 date 和 var1 的值应该是多少? 你将如何处理不同的 var1 值? 你在找pivot a DataFrame吗? 查看编辑@ALollz,这是我的想法 查看编辑@SuperStew,类似的东西 【参考方案1】:

您可以在 Pandas 中透视表。

例如:

entry.pivot(index='id', columns='date', values='var1')

【讨论】:

超级聪明!非常感谢! :D 知道如何将“id”保留为一列吗? @RickyKim 我知道了:entry.pivot(index='id', columns='date', values='var1').reset_index('id')

以上是关于如何展平具有相同 id 的多行的 pandas 数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中对具有相同 ID 的多行求和

如何从具有相同 id 的多行中选择仅一行的值并用 - 分隔它们? [复制]

如何将 JSON 对象展平为 Pandas Dataframe 对象 [重复]

如何在数据库中具有相同ID的多行中插入多个复选框值

将嵌套的 Json 文件展平为 Pandas 数据框

具有相同ID的多行之间的SQL差异