python pandas dataframe: работает для получения значения в ячейках каждой строки, обусловленного значением ячейки другой строки - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть следующий Pandas Dataframe.

name    day h1  h2  h3  h4  h5

pepe    1   10  4   0   4   7
pepe    2   54  65  4   42  6
pepe    3   1   3   28  6   12
pepe    4   5   6   1   8   5
juan    1   78  9   2   65  4
juan    2   2   42  14  54  95

Я хочу получить:

name    day h1  h2  h3  h4  h5  sum

pepe    1   10  4   0   4   7   
pepe    2   54  65  4   42  6   18
pepe    3   1   3   28  6   12  165
pepe    4   5   6   1   8   5   38
juan    1   78  9   2   65  4   
juan    2   2   42  14  54  95  154

Я искал в Интернете, но безуспешно.

Число 38 в столбце суммы находится в строке Пепе, день 4, и представляет собой сумму от h1 до h4 строки Пепе дня 4-1 = 3. Аналогично, оно продолжается для дня 3 и дня 2 В первый день вы должны сохранить пустой результат в соответствующей ячейке суммы.

То же самое должно быть сделано для Хуана и так же для различных значений имени.

Как я могу сделать Это?. Может быть, лучше попробовать сначала сделать oop, используя iterrows или что-то в этом роде.

1 Ответ

0 голосов
/ 28 февраля 2020

Я бы суммировал строки на основе значений ... Это мой любимый ресурс для сложных вызовов lo c, здесь много вариантов - https://www.shanelynn.ie/select-pandas-dataframe-rows-and-columns-using-iloc-loc-and-ix/

df.reset_index(inplace=True)
df.loc[df['name'] == 'pepe','sum'] = df.sum(axis=1)

или

df.reset_index(inplace=True)
df.groupby('name')['h1','h2','h3','h4'].sum(axis=1)

для использования l oop, потребуется df.itertuples ()

df['sum'] = 0 #Must initialize column first
for i in df.itertuples():
    temp_sum = i.h1 + i.h2 + i.h3 + i.h4
    #May need to check if final row of 'name', or groupby name first.
    df.at[i,'sum'] = temp_sum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...