выполнить числовую операцию над каждым элементом в фрейме данных на основе соответствующих элементов в другом фрейме данных - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть фрейм данных pandas, созданный с именами столбцов ['0', '1', '2', '3']. Элементы этого фрейма данных являются числовыми значениями. Давайте назовем это 'df_1'

Теперь мне нужно создать еще один фрейм данных (скажем, df_2) с тем же индексом и именем столбца, что и df_1.

Элементы df_2 таковы, что:

  1. Когда имя столбца равно '0', все строки под ним будут помечены как 0.
  2. Для любого другого столбца в df_2 его элемент строки будет суммой соответствующего элемента строки в df_1 и элемента строки, присутствующего под столбцом непосредственно перед текущим столбцом

т.е. 1013 *

df_2 [i, j] = df_1 [i, j] + df_1 [i, j-1], если текущее имя столбца не равно «0»

df_2 [i, j] = 0, если имя текущего столбца равно «0»

Я написал код Python для этой операции, и он работает нормально. Но принятый метод не эффективен и очень запутан.

Пожалуйста, дайте мне знать, если есть лучший способ сделать то же самое

import pandas
df_1=pandas.DataFrame([[0,10,20,30],[0,40,50,60],[0,70,80,90]],columns=['0','1','2','3'])

df_2=pandas.DataFrame(0,index=df_1.index,columns=df_1.columns)

for j in list(df_1.columns):
    idx=list(df_1.columns).index(j)
    for i in range(len(df_1.index)):
        if j!='0':
            df_2.iloc[i,idx]=df_1.iloc[i,idx-1]+df_1.iloc[i,idx]                       

1 Ответ

0 голосов
/ 06 апреля 2019

Сначала сдвиньте столбцы на один вправо, а затем добавьте к исходным столбцам, сделайте это равным df_2.

df_2 = df_1 + df_1.shift(1, axis=1)

Отфильтруйте столбцы для столбца '0', а затем сделайте равным 0.

df_2['0'] = 0

Панды преобразуются в плавающие во время этой операции, преобразуйте обратно в int, если хотите.

df_2.astype('int32')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...