【问题标题】:change data of a column for unique id and min, max date更改列的唯一 ID 和最小、最大日期的数据
【发布时间】:2020-02-25 05:17:07
【问题描述】:

enter image description here

   id    date       source
   456   01-05-2019    AQ
   456   02-05-2019    AQ
   456   03-05-2019    AQ
   456   11-06-2019    AQ
   456   12-06-2019    AQ
   456   13-06-2019    AQ
   78    25-06-2019    AQ
   78    26-06-2019    AQ
   78    27-06-2019    AQ
   78    28-06-2019    AQ

对于每个唯一id的每个月的最大和最小日期,来源应该保持不变;为了休息,它应该改变。输出应该是这样的

   id    date       source
   456   01-05-2019    AQ
   456   02-05-2019    Data
   456   03-05-2019    AQ
   456   11-06-2019    AQ
   456   12-06-2019    Data
   456   13-06-2019    AQ
   78    25-06-2019    AQ
   78    26-06-2019    Data
   78    27-06-2019    Data
   78    28-06-2019    AQ

【问题讨论】:

  • 欢迎来到 StackOverFlow @Helly!看看什么是good question。您甚至会在访问这些页面时获得奖励。我们不会为您编写代码。分享您到目前为止所尝试的内容,我们会努力改进它。

标签: pandas date


【解决方案1】:

使用transformgroup by 来确定最小最大值

然后使用.loc 更新源值

df = pd.DataFrame(data={"id": [456, 456, 456, 456, 456, 456, 78, 78, 78, 78], "date": [
    "01-05-2019", "02-05-2019", "03-05-2019", "11-06-2019",
    "12-06-2019", "13-06-2019", "25-06-2019", "26-06-2019",
    "27-06-2019", "28-06-2019"],
                        "source": ["AQ", "AQ", "AQ", "AQ", "AQ", "AQ", "AQ", "AQ", "AQ", "AQ"]})
df['date'] = pd.to_datetime(df['date']).dt.date
df['max_date'] = df.groupby(['id'])['date'].transform(max)
df['min_date'] = df.groupby(['id'])['date'].transform(min)

df.loc[df['max_date'] == df['date'], 'max_val'] = 1
df.loc[df['min_date'] == df['date'], 'min_val'] = 1
df.loc[(df['max_val'].notnull())|(df['min_val'].notnull()),'final_val']=1

df.loc[df['final_val'].isnull(),'source']='Data'
df.drop(['max_date','min_date','max_val','min_val','final_val'],axis=1,inplace=True)
    id     date     source
0  456  2019-01-05     AQ
1  456  2019-02-05   Data
2  456  2019-03-05   Data
3  456  2019-11-06   Data
4  456  2019-12-06     AQ
5  456  2019-06-13   Data
6   78  2019-06-25     AQ
7   78  2019-06-26   Data
8   78  2019-06-27   Data
9   78  2019-06-28     AQ

【讨论】:

    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2017-04-02
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多