【问题标题】:Converting duplicate date rows into columns rows?将重复的日期行转换为列行?
【发布时间】:2019-06-10 02:04:36
【问题描述】:

我正在尝试转换行(只有一个键,但由于更改期开始和更改期结束日期的多次更改而重复)。我认为将它们转换为行将删除重复值。我尝试在 Python 中进行旋转,但它不起作用,因为值将是日期列,并且无法对其执行任何操作。

这是我所拥有的:

这是我想要达到的目标

PS - 我有数百万条记录,有多个订单。我需要一个可以自动化的解决方案的帮助。

【问题讨论】:

  • 请使用dput显示示例而不是图像
  • 帮助我们帮助您。提供一个我们可以复制和粘贴的示例(使其可重现!)

标签: python r


【解决方案1】:

Python 解决方案:

import pandas as pd
df = pd.DataFrame({"Change Period Start":["2/2/2019", "2/2/2019", "2/2/2019", "9/11/2019"], 
                   "Change Period End":["9/11/2019", "9/11/2019", "5/5/2019", "9/11/2019"], 
                   "Change Period Supplier":["1/1/2020", "1/1/2020", "1/1/2025", "9/11/2019"]})

df.drop_duplicates(subset=['Change Period Supplier'])

Change Period Start Change Period End   Change Period Supplier
            2/2/2019        9/11/2019                 1/1/2020
            2/2/2019         5/5/2019                 1/1/2025
           9/11/2019        9/11/2019                9/11/2019

R 解决方案:

Change.Period.Start <- c("2/2/2019", "2/2/2019", "2/2/2019", "9/11/2019")
Change.Period.End <- c("9/11/2019", "9/11/2019", "5/5/2019", "9/11/2019")
Change.Period.Supplier <- c("1/1/2020", "1/1/2020", "1/1/2025", "9/11/2019")
df = data.frame(Change.Period.Start, Change.Period.End, Change.Period.Supplier)

df[!duplicated(df$Change.Period.Supplier), ]

  Change.Period.Start Change.Period.End Change.Period.Supplier
1            2/2/2019         9/11/2019               1/1/2020
3            2/2/2019          5/5/2019               1/1/2025
4           9/11/2019         9/11/2019              9/11/2019

OP 根据 cmets 更新了 R 版本

GR.Key <- c("A", "A", "A", "B")
Change.Period.Start <- c("2/2/2019", "2/2/2019", "2/2/2019", "9/11/2019")
Change.Period.End <- c("9/11/2019", "9/11/2019", "5/5/2019", "9/11/2019")
Change.Period.Supplier <- c("1/1/2020", "1/1/2020", "1/1/2025", "9/11/2019")
df = data.frame(GR.Key, Change.Period.Start, Change.Period.End, Change.Period.Supplier)

library(data.table)
dcast(df, GR.Key ~ paste0("Change.Period.Start", rowid(GR.Key)), value.var = "Change.Period.Start")

  GR.Key Change.Period.Start1 Change.Period.Start2 Change.Period.Start3
1      A             2/2/2019             2/2/2019             2/2/2019
2      B            9/11/2019                 <NA>                 <NA>

【讨论】:

  • 您好,非常感谢您的回答。但是,我有大约百万值。这将不起作用。你能给我一个不同的解决方案吗?
  • 能否详细说明问题?
  • 是的,每个 GR Key 都有大约 50-60 次更改。因此,整个数据集可能有唯一的 500-600 GR 键,但由于重复值(由于多个更改订单日期),我需要将所有这些行放入列中。
  • 您是说只想查看重复值吗?
  • 我是说对于每个 GR_Key,我想在一行中显示所有更改日期。
猜你喜欢
  • 1970-01-01
  • 2013-10-01
  • 2018-04-11
  • 2015-08-06
  • 2021-11-03
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多