[英]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 的值填充它,并对同一位置的前一天值求和。 实施步骤是
我的代码是
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.