Dataframe: как создать ссылку на динамический c - PullRequest
0 голосов
/ 03 августа 2020

Это мой фрейм данных:

DF

В последнем столбце (D) у меня будет значение столбца C2, если значение столбца B равно 2; Значение C3, если B = 3… для каждой строки.

Я безуспешно пытался.

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Значения C1-C4 не совпадают.

Мой подробный фрейм данных: df

anc    PM0       LR1     LR2    ....   LR41          R1               R2    R3 ... R40
 2     1500      0.05    0.02          0.05   "LR"&'anc'=LR2 => 0.02  LR3   LR4   LR41
 3     2500      0.02    0.03          0.012      LR3 value           LR4   LR5   LR42
 4     150.23    0.03    0.036         0.05       LR4 value 
 12    220       0.05    0.09          0.03       LR12 value   
 11    3330      0.06    0.01          0.02       LR11 value

....

-> 600 000 строк

я бы создал 41 столбец R1-R41, функцию значения столбца 'an c'.

Если 'an c' = 2, тогда R1 = LR2. Значение R2 = LR3.value ... R41 = LR42.value

и это для каждых 600000 строк

Я пробовал следующий код

для i в диапазоне (1,41) df ['R' + str (i)] = df ["LR" + (df ['an c'] + i) .astype (str)]

, но я получаю 'ошибку памяти '

Большое спасибо.

0 голосов
/ 03 августа 2020

Вы можете просто использовать для этого словарь:

vals = [0.5, 0.2, 0.3, 0.4];
convDict = {i+1:val for i,val in enumerate(vals)} # +1 because you used 1 as the base
df['D'] = df['B'].map(convDict)

Если у вас действительно есть фрейм данных, как вы показали на изображении, которое вы предоставили, где все записи столбцов от c1 до c4 равны, вы можете заменить vals на:

vals = df.loc[0,'C1':'C4'].values

Если значения в c1 по c4 не равны, я бы использовал следующий подход:

A = df.loc[:,['C1':'C4']].values
y = df['B'].values.astype(int)-1
x = np.arange(len(y)).astype(int)
df['D'] = A[x,y]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...