У меня есть фрейм данных pandas, созданный с именами столбцов ['0', '1', '2', '3']. Элементы этого фрейма данных являются числовыми значениями. Давайте назовем это 'df_1'
Теперь мне нужно создать еще один фрейм данных (скажем, df_2) с тем же индексом и именем столбца, что и df_1.
Элементы df_2 таковы, что:
- Когда имя столбца равно '0', все строки под ним будут помечены как 0.
- Для любого другого столбца в 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]