Добавить два элемента в фрейм данных (на основе индекса) - PullRequest
1 голос
/ 08 апреля 2019

У меня есть датафрейм, в котором некоторые строки бесполезны, кроме одной переменной.Я хочу добавить эту переменную в этих строках к предыдущей строке, а затем удалить ненужные строки.

Во фрейме данных есть несколько строк, в которых единственная полезная информация находится в переменной, поэтому я хочусохранить эту информацию.Точнее, мой фрейм данных выглядит примерно как

|cat1| cat2|var1|var2|
|A   |x    |1   |2   |
|A   |x    |1   |0   |
|A   |x    |.   |5   |
|A   |y    |1   |2   |
|A   |y    |1   |2   |
|A   |y    |1   |3   |
|A   |y    |.   |6   |
|B   |x    |1   |2   |
|B   |x    |1   |4   |
|B   |x    |1   |2   |
|B   |x    |1   |1   |
|B   |x    |.   |3   |

, и я хочу получить

|cat1| cat2|var1|var2|
|A   |x    |1   |2     |
|A   |x    |1   |5(5+0)|
|A   |y    |1   |2     |
|A   |y    |1   |2     |
|A   |y    |1   |9(6+3)|
|B   |x    |1   |2     |
|B   |x    |1   |4     |
|B   |x    |1   |2     |
|B   |x    |1   |4(3+1)|

Я пробовал код, подобный

test = df[df['var1'] == '.'].index
for num in test:
    df['var2][num - 1] = df['var2][num - 1] + df['var2][num] 

, но это не такt работа.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 08 апреля 2019

Для очень удобочитаемого решения объедините np.where, чтобы выбрать строки, в которых shift ed строк var1 содержат .. Используйте -1, чтобы выбрать следующую строку. Если это так, добавьте следующую строку, в противном случае просто заполните исходную строку. После этого просто отбросьте все строки с помощью .

df['var2_new'] = np.where(df['var1'].shift(-1) == '.', 
                          df['var2'] + df['var2'].shift(-1), df['var2'])
df[df['var1'] != '.']
#   cat1 cat2 var1  var2  var2_new
#0     A    x    1     2       2.0
#1     A    x    1     0       5.0
#3     A    y    1     2       2.0
#4     A    y    1     2       2.0
#5     A    y    1     3       9.0
#7     B    x    1     2       2.0
#8     B    x    1     4       4.0
#9     B    x    1     2       2.0
#10    B    x    1     1       4.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...