【发布时间】:2022-08-14 23:22:24
【问题描述】:
我有一个 df \"df1\",如下所示,我需要使用 groupby \"plant_name\" 填充不同 df 中 \"n\" 列数中的值的 nan 值,如下所示。
Index Adj_Prod Adj_Prod Adj_Prod Adj_Prod Adj_Prod month plant_name year
3455 63285.13821 63285.13821 63285.13821 63285.13821 63285.13821 12 PENASCAL II 2021
3464 52758.13661 52758.13661 52758.13661 52758.13661 52758.13661 1 PENASCAL II 2022
3473 55998.67419 55998.67419 55998.67419 55998.67419 55998.67419 2 PENASCAL II 2022
3482 68582.45954 68582.45954 68582.45954 68582.45954 68582.45954 3 PENASCAL II 2022
3491 97313.92303 97313.92303 97313.92303 97313.92303 97313.92303 4 PENASCAL II 2022
3500 106054.0829 106054.0829 106054.0829 106054.0829 106054.0829 5 PENASCAL II 2022
3509 70424.47176 70424.47176 70424.47176 70424.47176 70424.47176 6 PENASCAL II 2022
3518 nan nan nan nan nan 7 PENASCAL II 2022
3527 nan nan nan nan nan 8 PENASCAL II 2022
3536 nan nan nan nan nan 9 PENASCAL II 2022
3545 nan nan nan nan nan 10 PENASCAL II 2022
3554 nan nan nan nan nan 11 PENASCAL II 2022
3563 nan nan nan nan nan 12 PENASCAL II 2022
这是另一个数据框 \"df2\",我需要使用它来填充需要按 \"plant_name\" 分组的 nan 值,但我不确定如何通过可能更改的列号来执行此操作 - 在在这个例子中,有 5 列,如下所示:
Index month plant_name 0 1 2 3 4
46 11 PENASCAL I 57024.37 85799.06 56423.82 44967.31 62426.29
47 12 PENASCAL I 72072.84 61719.23 74177.79 53048.06 61513.94
48 7 PENASCAL II 56188.81 64556.23 74918.13 72951.01 57474.33
49 8 PENASCAL II 31309.33 38571.34 61658.58 38578.86 52948.55
50 9 PENASCAL II 29783.46 39220.07 38641.02 35055.39 33024.38
51 10 PENASCAL II 65961.29 38898.14 55066.84 30100.4 65961.29
52 11 PENASCAL II 55134.4 49616.31 50353.2 48451.29 51903.16
53 12 PENASCAL II 62738.47 61756.62 60691.09 54747.75 48753.57
最终结果应如下所示:
Adj_Prod Adj_Prod Adj_Prod Adj_Prod Adj_Prod month plant_name year
3455 63285.13821 63285.13821 63285.13821 63285.13821 63285.13821 12 PENASCAL II 2021
3464 52758.13661 52758.13661 52758.13661 52758.13661 52758.13661 1 PENASCAL II 2022
3473 55998.67419 55998.67419 55998.67419 55998.67419 55998.67419 2 PENASCAL II 2022
3482 68582.45954 68582.45954 68582.45954 68582.45954 68582.45954 3 PENASCAL II 2022
3491 97313.92303 97313.92303 97313.92303 97313.92303 97313.92303 4 PENASCAL II 2022
3500 106054.0829 106054.0829 106054.0829 106054.0829 106054.0829 5 PENASCAL II 2022
3509 70424.47176 70424.47176 70424.47176 70424.47176 70424.47176 6 PENASCAL II 2022
3518 56188.81 64556.23 74918.13 72951.01 57474.33 7 PENASCAL II 2022
3527 31309.33 38571.34 61658.58 38578.86 52948.55 8 PENASCAL II 2022
3536 29783.46 39220.07 38641.02 35055.39 33024.38 9 PENASCAL II 2022
3545 65961.29 38898.14 55066.84 30100.4 65961.29 10 PENASCAL II 2022
3554 55134.4 49616.31 50353.2 48451.29 51903.16 11 PENASCAL II 2022
3563 62738.47 61756.62 60691.09 54747.75 48753.57 12 PENASCAL II 2022
我认为 groupby \"plant_name\" 然后使用列号的值会起作用,但我不确定如何做到这一点,因为列号会根据 \"n\" 的值而改变,即 5在这个例子中。谢谢你!
我已经尝试过这样的事情,但不知道如何指定列以及如何处理例如 500 列 0、1、...500。
df1.fillna(df2.groupby([\'plant_name\'])[\'0\',\'1\',\'2\',\'3\',\'4\'].
这给了我一个错误:
KeyError: \"Columns not found: \'2\', \'3\', \'1\', \'0\', \'4\'\"
我也试过这个但不起作用:
df1.fillna(df2.groupby([\'plant_name\'])[list(range(5))]))
此外,这不起作用:
df1.groupby([\'plant_name\'])[\'Adj_Prod\'].fillna(df2.iloc[:,2:6])
标签: pandas group-by nan autofill