Мне нужно вставить строку по индексу N, который будет принимать суммирование всех строк, которые находятся под ним - PullRequest
1 голос
/ 26 сентября 2019

У меня есть датафрейм с 30 строками.Мне нужно вставить строку по 10-му индексу, дать ему имя и затем иметь все ячейки в нем, быть суммой всех ячеек, которые находятся под ним.Он будет представлять собой общее количество нижних исполнительских частей.

pd.DataFrame(np.insert(df.values, 0,)

Я хотел бы назвать его, дать ему индексное имя и сохранить все остальные данные ниже.просто и вставка и суммирование всех строк под ним.

1 Ответ

2 голосов
/ 26 сентября 2019

I панды существуют DataFrame.insert, но работают только для столбцов, поэтому необходимо нечто более сложное:

df = pd.DataFrame({
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
})

Решения для включения строк с индексом idx для суммы:

idx = 3
df1 = df.iloc[:idx]
df2 = df.iloc[idx:]

df = pd.concat([df1, df2.sum().to_frame('new').T, df2])
print (df)
      B  C
0     4  7
1     5  8
2     4  9
new  14  9
3     5  4
4     5  2
5     4  3

Или:

idx = 3
df.loc[idx + .5] = df.iloc[idx:].sum()
df = df.sort_index().rename({idx + .5:'new'})
print (df)
        B    C
0.0   4.0  7.0
1.0   5.0  8.0
2.0   4.0  9.0
3.0   5.0  4.0
new  14.0  9.0
4.0   5.0  2.0
5.0   4.0  3.0

Решения для исключения строки с idx для суммы:

idx = 3
df1 = df.iloc[:idx+1]
df2 = df.iloc[idx+1:]

df = pd.concat([df1, df2.sum().to_frame('new').T, df2])
print (df)
     B  C
0    4  7
1    5  8
2    4  9
3    5  4
new  9  5
4    5  2
5    4  3

idx = 3
df.loc[idx + .5] = df.iloc[idx + 1:].sum()
df = df.sort_index().rename({idx + .5:'new'})
print (df)
       B    C
0.0  4.0  7.0
1.0  5.0  8.0
2.0  4.0  9.0
3.0  5.0  4.0
new  9.0  5.0
4.0  5.0  2.0
5.0  4.0  3.0

Если все столбцычисловое, возможно также использование np.insert:

idx = 3

arr = df.to_numpy()
s = arr[idx:].sum(axis=0)[None, :]
np.insert(arr, 1, s, 0)  

df = pd.DataFrame(arr, columns=df.columns).rename({idx:'new'})
print (df)
     B  C
0    4  7
1    5  8
2    4  9
new  5  4
4    5  2
5    4  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...