我從一個檔案開始,其中包含一組人的每日資料,如果一列的一個值發生變化,我想捕獲它何時發生變化
資料框的結構如下所示:
| ID | 姓名 | 開始日期 | 檔案日期 | 價值 |
|---|---|---|---|---|
| 1 | 站 | 10-12-2019 | 24-04-2021 | 1 |
| 1 | 站 | 10-12-2019 | 25-04-2021 | 0.5 |
| 1 | 站 | 10-12-2019 | 26-04-2021 | 0.5 |
| 1 | 站 | 10-12-2019 | 27-04-2021 | 0.9 |
| 2 | 丹尼 | 20-03-2020 | 24-04-2021 | 1 |
| 2 | 丹尼 | 20-03-2020 | 25-04-2021 | 1 |
| 2 | 丹尼 | 20-03-2020 | 26-04-2021 | 0.3 |
| 2 | 丹尼 | 20-03-2020 | 27-04-2021 | 0.3 |
| 3 | 艾麗 | 14-08-2020 | 24-04-2021 | 1 |
| 3 | 艾麗 | 14-08-2020 | 25-04-2021 | 1 |
| 3 | 艾麗 | 14-08-2020 | 26-04-2021 | 1 |
| 3 | 艾麗 | 14-08-2020 | 27-04-2021 | 1 |
我的目標是將一個人的第一個生效日期設定為開始日期,然后在值更改時將生效日期設定為檔案日期。
獲得這樣的資料幀:
| ID | 姓名 | 生效日期 | 價值 |
|---|---|---|---|
| 1 | 站 | 10-12-2019 | 1 |
| 1 | 站 | 25-04-2021 | 0.5 |
| 1 | 站 | 27-04-2021 | 0.9 |
| 2 | 丹尼 | 20-03-2020 | 1 |
| 2 | 丹尼 | 26-04-2021 | 0.3 |
| 3 | 艾麗 | 14-08-2020 | 1 |
uj5u.com熱心網友回復:
Comapre for 每組不相等的值 by DataFrameGroupBy.shift,過濾器boolean indexing和替換每個名稱的第一個值 by Series.maskwith DataFrame.duplicated, lastrename和 remove 列:
df = df[df['value'].ne(df.groupby('name')['value'].shift())].copy()
df['startdate'] = df['startdate'].mask(df.duplicated('name'), df['filedate'])
df = df.rename(columns={'startdate':'effective date'}).drop('filedate', axis=1)
print (df)
id name effective date value
0 1 Sta 10-12-2019 1.0
1 1 Sta 25-04-2021 0.5
3 1 Sta 27-04-2021 0.9
4 2 Danny 20-03-2020 1.0
6 2 Danny 26-04-2021 0.3
8 3 Elle 14-08-2020 1.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/336080.html
上一篇:如何創建指示符列以指示資料框中先前條目的特定更改,其中按ID對其進行排序和分組?
下一篇:我的熊貓資料框的特定轉置
