簡體   English   中英

用必須在另一列的特定行上計算的公式填充值為0或NaN的Pandas數據框行

[英]Fill Pandas dataframe rows, whose value is a 0 or NaN, with a formula that have to be calculated on specific rows of another column

我有一個dateframe其中的“價格”列中的值取決於雙方在“量”的價值觀和“年”列是不同的。 例如,對於等於2的數量,我在2017年的價格等於2,在2018年的價格為4。我想用2018年的值填充2019年的行,這些行的值為0和NaN。

df = pd.DataFrame({
    'quantity': pd.Series([1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9]),
    'year': pd.Series([2017,2017,2017,2017,2017,2017,2017,2017,2017,2018,2018,2018,2018,2018,2018,2018,2018,2018,2019,2019,2019,2019,2019,2019,2019,2019,2019,]),
    'price': pd.Series([1,2,3,4,5,6,7,8,9,2,4,6,8,10,12,14,16,18,np.NaN,np.NaN,0,0,np.NaN,0,np.NaN,0,np.NaN])
})

如果我應該計算2017年至2018年之間的平均值 ,而不是從2018年取值,該怎么辦?

我試圖重新適應這個問題,將其應用於第一種情況(以應用2018年的數據),但是它不起作用:

df['price'][df['year']==2019].fillna(df['price'][df['year'] == 2018], inplace = True)

請你幫助我好嗎?

預期輸出應為類似於以下內容的數據框:

具有2018年值的DF

df = pd.DataFrame({
    'quantity': pd.Series([1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9]),
    'year': pd.Series([2017,2017,2017,2017,2017,2017,2017,2017,2017,2018,2018,2018,2018,2018,2018,2018,2018,2018,2019,2019,2019,2019,2019,2019,2019,2019,2019,]),
    'price': pd.Series([1,2,3,4,5,6,7,8,9,2,4,6,8,10,12,14,16,18,2,4,6,8,10,12,14,16,18])
})

Df值是2017年至2018年之間的平均值

df = pd.DataFrame({
    'quantity': pd.Series([1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9]),
    'year': pd.Series([2017,2017,2017,2017,2017,2017,2017,2017,2017,2018,2018,2018,2018,2018,2018,2018,2018,2018,2019,2019,2019,2019,2019,2019,2019,2019,2019,]),
    'price': pd.Series([1,2,3,4,5,6,7,8,9,2,4,6,8,10,12,14,16,18,1.5,3,4.5,6,7.5,9,10.5,12,13.5])
})

這是20172018的一種填充方式。 首先按數量對上一年的數據進行分組,然后加上平均值:

m = df[df.year.isin([2017, 2018])].groupby('quantity').price.mean()    

使用set_indexquantity列設置為索引,將0s替換為NaNs並使用fillna ,該方法還接受字典根據索引映射值:

ix = df[df.year.eq(2019)].index
df.loc[ix, 'price'] = (df.loc[ix].set_index('quantity').price
                        .replace(0, np.nan).fillna(m).values)

    quantity  year  price
0          1  2017    1.0
1          2  2017    2.0
2          3  2017    3.0
3          4  2017    4.0
4          5  2017    5.0
5          6  2017    6.0
6          7  2017    7.0
7          8  2017    8.0
8          9  2017    9.0
9          1  2018    2.0
10         2  2018    4.0
11         3  2018    6.0
12         4  2018    8.0
13         5  2018   10.0
14         6  2018   12.0
15         7  2018   14.0
16         8  2018   16.0
17         9  2018   18.0
18         1  2019    1.5
19         2  2019    3.0
20         3  2019    4.5
21         4  2019    6.0
22         5  2019    7.5
23         6  2019    9.0
24         7  2019   10.5
25         8  2019   12.0
26         9  2019   13.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM