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