#python #pandas
Вопрос:
Есть ли возможность перебрать фрейм данных, извлечь значение из одного столбца и добавить его в предыдущую строку? После этого удалите эту строку, так как в противном случае она не содержит никакой информации.
Оригинал
Указатель | A | B | C | D |
---|---|---|---|---|
1 | текст | текст | текст | текст |
2 | NaN | NaN | Ценность | NaN |
3 | текст | текст | текст | текст |
4 | NaN | NaN | Ценность | NaN |
Выход
Указатель | A | B | C | D |
---|---|---|---|---|
1 | строка | строка | строка, Значение | строка |
3 | строка | строка | строка, Значение | строка |
Я предполагаю, что первый и последний шаг должны быть включены, но я не уверен, что я мог бы использовать, чтобы получить значение в предыдущей строке.
Первый шаг
Выберите строки, где, например, столбец А содержит значения nan.
df[df['A'].isnull()]
Промежуточный этап
Добавьте значение в C к тексту в строке до (например, 2C -> 1C)
?
Последний шаг
Отбросьте строки, где, например, столбец А содержит значения nan.
df.dropna(subset=['A'])
Ответ №1:
Я исправил ваш исходный фрейм данных, добавив одну строку:
A B C D
Index
1 T1 T2 T3 T4
2 NaN NaN Val1 NaN
3 T5 T6 T7 T8
4 NaN NaN Val2 NaN
5 T10 T11 T12 T13
Первый шаг-вычислить ряд, указав, какие строки следует изменить.
myRows = df.A.shift(-1).isnull() amp; df.C.shift(-1).notnull()
Я предположил, что:
- Столбец в следующей строке должен быть NaN,
- и столбец C в следующей строке не должен быть NaN.
Вторым шагом является вычисление новых значений для вышеуказанных («разыскиваемых») строк:
newVals = (df.C ', ' df.C.shift(-1))[myRows]
Следующий шаг-записать их в df.C с помощью маски, чтобы сохранить другие значения:
df.C.mask(myRows, newVals, inplace=True)
И последний шаг-удалить строки, содержащие NaN, в столбце:
df.dropna(subset=['A'], inplace=True)
Конечный результат таков:
A B C D
Index
1 T1 T2 T3, Val1 T4
3 T5 T6 T7, Val2 T8
5 T10 T11 T12 T13