繁体   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