![](/img/trans.png)
[英]Pandas calculate the diff between all values in one group and the last value of the previous group
[英]Using pandas replace all empty values with last row based on previous month last value in a group by condition
我有一個 dataframe 如下圖
使用 pandas dataframe 我想根據上個月最后一個值從 groupby 條件的第一行替換列中的空值
直到最后一個日期基於每個 ID 扇區使用情況,應填寫價格列值。
ID Sector Usage Price Date
1 A R 20 29/08/2022
1 A R 30 30/08/2022
1 A R 40 31/08/2022
1 A R 01/09/2022
1 A R 02/09/2022
. . . . .
. . . . .
1 A R 30/09/2022
. . . . .
. . . . .
1 A R 31/10/2022
. . . . .
. . . . .
1 A R 30/11/2022
2 B C 200 31/08/2022
3 B R 60 31/08/2022
預期輸出
ID Sector Usage Price Date
1 A R 20 29/08/2022
1 A R 30 30/08/2022
1 A R 40 31/08/2022
1 A R 01/09/2022
1 A R 02/09/2022
. . . . .
. . . . .
1 A R 40 30/09/2022
. . . . .
. . . . .
1 A R 40 31/10/2022
. . . . .
. . . . .
1 A R 40 30/11/2022
2 B C 200 31/08/2022
2 B C 200 01/09/2022
. . . . .
. . . . .
2 B C 200 31/10/2022
. . . . .
. . . . .
2 B C 200 31/12/2022
3 B R 60 31/08/2022
我嘗試了以下代碼但無法正常工作
m = df['Price'] == ''
s = df.assign(Price=df['Price'].mask(m)).groupby(['Sector','Usage'])['Price'].ffill()
df['Price'] = np.where(m, s, df['Price']).astype(int)
或者
df.replace({'Price': {0:np.NaN}}).ffill()
假設您的空值是空字符串:
import pandas as pd
import numpy as np
df = pd.DataFrame.from_dict({"fills": [100, 200, "", 40, "", 5]})
df["fills"].replace("", np.nan, regex=True).fillna(method="ffill")
Output:
fills
0 100
1 200
2
3 40
4
5 5
fills
0 100.0
1 200.0
2 200.0
3 40.0
4 40.0
5 5.0
並使用 groupby / transform:
df = pd.DataFrame.from_dict({"fills": [100, 200, "", 40, "", 5], "grps": ["A", "B", "C", "A", "A", "B"]})
df["fills"] = df.groupby(by=["grps"])["fills"].transform(lambda x: x.replace("", np.nan)).fillna(method="ffill")
Output:
fills grps
0 100 A
1 200 B
2 C
3 40 A
4 A
5 5 B
fills grps
0 100.0 A
1 200.0 B
2 200.0 C
3 40.0 A
4 40.0 A
5 5.0 B
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.