Как заполнить 0 в кадре данных панд с фиксированным номером индекса?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
1
задан k song 11 April 2019 в 09:36
поделиться

2 ответа

Метод 1

Сначала примените np.array, чтобы получить массивы, затем примените pd.Series, чтобы в основном повернуть значения каждого столбца в строку, чтобы мы могли использовать стек для преобразования. После этого мы используем stack и сохраняем NaN.

В конце мы concat все кадры данных до одного окончательного кадра данных по axis=1

cols = ['valueA', 'valueB']
dfs = []
for col in cols:
    dfs.append(df.groupby('mIndex')[col].apply(np.array)
                                        .apply(pd.Series)
                                        .stack(dropna=False).reset_index(level=0)
                                                            .rename({0:col}, axis=1))

df_final = pd.concat(dfs, axis=1).reset_index(drop=True)

print(df_final)
   mIndex  valueA  mIndex  valueB
0       1   111.0       1    10.0
1       1   112.0       1    20.0
2       1     NaN       1     NaN
3       2   222.0       2    30.0
4       2   221.0       2    40.0
5       2   223.0       2    50.0
6       3   333.0       3    60.0
7       3     NaN       3     NaN
8       3     NaN       3     NaN

Метод 2

мы можем получить доступ к groupby элементам

df= pd.concat([
       d.reset_index(drop=True).reindex(range(3))
       for n, d in df.groupby('mIndex')
], ignore_index=True)

print(df)
   mIndex  valueA  valueB
0     1.0   111.0    10.0
1     1.0   112.0    20.0
2     NaN     NaN     NaN
3     2.0   222.0    30.0
4     2.0   221.0    40.0
5     2.0   223.0    50.0
6     3.0   333.0    60.0
7     NaN     NaN     NaN
8     NaN     NaN     NaN
0
ответ дан Erfan 11 April 2019 в 09:36
поделиться

Я могу сделать это только тупым путем, может быть, у кого-то есть лучшее решение:

# df
   mIndex valueA valueB
0       1      a      a
1       2      b      b
2       2      b      b
3       3      c      c

Вот и мы: ]

0
ответ дан knh190 11 April 2019 в 09:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: