Использование лямбды внутри l oop для перебора столбцов - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть df, который имеет следующую структуру:

ID | M | C1 | C2 | C3  
tt | 23| 23 | 563| 234    
rt | 13| 3  | 32 | 67  
cf | 78| 67 | 90 | 90  
di | 45| 12 | 112| 34  

Я хочу перебрать столбцы и создать дополнительные столбцы в результате следующих операций:

additional_column1 = M+1+C1
additional_column2 = additional_column1+1+C2
additional_column3 = additional_column2+1+C3  

Итак что полученный DF будет выглядеть так:

ID | M | C1 | C2 | C3 | AC1 | AC2 | AD3 
tt | 23| 23 | 563| 234|  47 | 611 | 846

Я создал для l oop, но вместо чисел он заполняет столбцы с в 0x7f6e81e2c5e0>

L oop выглядит следующим образом:

for c in np.arange(start=1, stop=len(df.columns[1:])+1, step=1):
    df['AC'+str(c)] = lambda c: df.columns[c-1].add(0).sub(df.iloc[:, c])  

Нужна подсказка, где я допустил ошибку. Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 09 апреля 2020

IIU C:

for c in np.arange(start=1, stop=len(df.columns[1:])+1, step=1):
    df['AC'+str(c)] = df.iloc[: , c-1].add(0).sub(df.iloc[:, c])  
0 голосов
/ 09 апреля 2020

Вы можете просто сделать это: (работал для меня)

df = pd.DataFrame(data=[[23,23,563,234],[13,3,32,67],[78,67,90,90],[45,12,112,34]], columns=['M','C1','C2','C3'])

columns = df.columns

last_col = None
for i, col in enumerate(columns):
    if last_col is None:
        last_col = col
        continue
    df['AC' + str(i)] = df[last_col] + 1 + df[col]
    last_col = 'AC' + str(i)


0 голосов
/ 09 апреля 2020

Вы также можете попробовать df.cumsum() на axis=1 и добавить 1 в качестве диапазона.

# df = df.set_index('ID') if ID is not an index
out = df.assign(**df.cumsum(axis=1).add(range(df.shape[1])).iloc[:,1:].add_prefix('A'))

     M  C1   C2   C3  AC1  AC2  AC3
ID                                 
tt  23  23  563  234   47  611  846
rt  13   3   32   67   17   50  118
cf  78  67   90   90  146  237  328
di  45  12  112   34   58  171  206
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...