簡體   English   中英

Pandas df 獲取上一行值

[英]Pandas df get previous row value

我有一個 pandas dataframe 和 null 值:

指數 費查 代碼 地方 數據1 porcentaje_dato1 數據2 數據3 porcentaje_dato3
0 2021-01-04 1個 地點1 25809 0.3 鈉鹽 鈉鹽 0.0
1個 2021-01-04 2個 地點2 2004年 0.15 鈉鹽 鈉鹽 0.0
2個 2021-01-04 3個 地點3 9380 0.92 鈉鹽 鈉鹽 0.0
3個 2021-01-04 4個 地點4 153 0.01 鈉鹽 鈉鹽 0.0
20 2021-01-05 1個 地點1 40263 0.47 鈉鹽 鈉鹽 0.0
21 2021-01-05 2個 地點2 2985 0.22 鈉鹽 鈉鹽 0.0
22 2021-01-05 3個 地點3 12929 1.27 鈉鹽 鈉鹽 0.0
23 2021-01-05 4個 地點4 2656 0.22 鈉鹽 鈉鹽 0.0
40 2021-01-07 1個 地點1 53934 0.64 鈉鹽 鈉鹽 0.0
41 2021-01-07 2個 地點2 6186 0.46 鈉鹽 鈉鹽 0.0
42 2021-01-07 3個 地點3 14406 1.42 鈉鹽 鈉鹽 0.0
43 2021-01-07 4個 地點4 3190 0.26 鈉鹽 鈉鹽 0.0
1415 2021-04-14 1個 地點1 1970183 23.23 1419209.0 550974.0 6.5
1416 2021-04-14 2個 地點2 331419 24.89 228547.0 102872.0 7.73
1417 2021-04-14 3個 地點3 317019 31.22 216006.0 101013.0 9.95
1418 2021-04-14 4個 地點4 233042 19.18 175460.0 57582.0 4.74
1436 2021-04-15 1個 地點1 2041844 24.07 1481837.0 560007.0 6.6
1437 2021-04-15 2個 地點2 347963 26.14 243497.0 104466.0 7.85
1438 2021-04-15 3個 地點3 330038 32.5 225213.0 104825.0 10.32
1439 2021-04-15 4個 地點4 240488 19.79 180775.0 59713.0 4.91

如果 dato2 的值是 null,我需要用 dato1 的值填充它,並對同一位置的前一天值求和。 實施步驟是

  • 按地點和日期排序
  • 迭代 dataframe。對於每一行
    • 檢查它是否是整個 df 的第一行。 如果是,則 dato2 = dato1
    • 檢查位置是否有變化(如果實際行的位置與前一行的位置不同)。 那么dato2 = dato1
    • else: dato2 = dato2 上一行 + dato1 實際行

我的代碼是

df = df.sort_values(by=['place', 'fecha']) 
for i, row in df.iterrows():
  if pd.isnull(row['dato2']):
    if i == 0:
      df['dato2'][i] = df['dato1'][i]
    elif df['place'][i] != df['place'][i-1]:
      df['dato2'][i] = df['dato1'][i]
    else:
      df['dato2'][i] = df['dato2'][i-1] + df_vac['dato1'][i]
  else:
    df['dato2'][i]

但是使用此代碼索引無效。

這是我的方法。

# Sort dataframe
df = (pd.read_csv(data)
        .sort_values(['Place','fecha']
        .reset_index())

# Fill missing values for dato2 with dato1
df['dato2'] = df.dato2.fillna(df.dato1)

# Calculate the aggregate, store in separate df
df_agg = (df[['Place','fecha','dato2']].groupby(['Place','fecha']).sum()
                                       .groupby('Place').cumsum()
                                       .reset_index())

# Update original data
df.update(df_agg)

結果:

指數 費查 代碼 地方 數據1 porcentaje_dato1 數據2 數據3 porcentaje_dato3
0 2021-01-04 1個 地點1 25809 0.30 25809.0 鈉鹽 0.00
4個 2021-01-05 1個 地點1 40263 0.47 66072.0 鈉鹽 0.00
8個 2021-01-07 1個 地點1 53934 0.64 120006.0 鈉鹽 0.00
12 2021-04-14 1個 地點1 1970183 23.23 1539215.0 550974.0 6.50
16 2021-04-15 1個 地點1 2041844 24.07 3021052.0 560007.0 6.60
1個 2021-01-04 2個 地點2 2004年 0.15 2004.0 鈉鹽 0.00
5個 2021-01-05 2個 地點2 2985 0.22 4989.0 鈉鹽 0.00
9 2021-01-07 2個 地點2 6186 0.46 11175.0 鈉鹽 0.00
13 2021-04-14 2個 地點2 331419 24.89 239722.0 102872.0 7.73
17 2021-04-15 2個 地點2 347963 26.14 483219.0 104466.0 7.85
2個 2021-01-04 3個 地點3 9380 0.92 9380.0 鈉鹽 0.00
6個 2021-01-05 3個 地點3 12929 1.27 22309.0 鈉鹽 0.00
10 2021-01-07 3個 地點3 14406 1.42 36715.0 鈉鹽 0.00
14 2021-04-14 3個 地點3 317019 31.22 252721.0 101013.0 9.95
18 2021-04-15 3個 地點3 330038 32.50 477934.0 104825.0 10.32
3個 2021-01-04 4個 地點4 153 0.01 153.0 鈉鹽 0.00
7 2021-01-05 4個 地點4 2656 0.22 2809.0 鈉鹽 0.00
11 2021-01-07 4個 地點4 3190 0.26 5999.0 鈉鹽 0.00
15 2021-04-14 4個 地點4 233042 19.18 181459.0 57582.0 4.74
19 2021-04-15 4個 地點4 240488 19.79 362234.0 59713.0 4.91

暫無
暫無

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

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