Изменение значений в фрейме данных на основе имени ячейки и столбца

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных

 df=pd.DataFrame( [0,1,2],columns=[‘3m3a’,’1z6n’,’11p66d’])
 

Теперь я хотел бы применить значение 2 * * (последние номера имени столбца). Например, для последнего 2 * 2* 66

Df.apply(lambda x: 2*x) для шага 1

Шаг 2-самая трудная часть

Можно создать новый фрейм данных, например df2=df.stack().reset_index().apply(lambda x: x[re.search(‘[azAZ] ’,x).end():]) , а затем несколько 2 .

Что может быть более питоническим способом?

Ответ №1:

Для фрейма данных:

    3m3a  1z6n  11p66d
0     0     1       2
 

Вы можете использовать .colums.str.extract , а затем DataFrame.multiply :

 vals = df.columns.str.extract(r"(d )[a-z]*?$").T.astype(int)
df = df.multiply(2 * vals.values, axis=1)
print(df)
 

С принтами:

    3m3a  1z6n  11p66d
0     0    12     264
 

Ответ №2:

Опоздав на вечеринку и найдя почти тот же ответ, но используя отрицательное регулярное выражение:

 newdf = df.multiply(
    2 * df.columns.str.extract(r'.*(?<!d)(d )D*').astype(int).values.ravel(),
    axis=1)

>>> newdf
   3m3a  1z6n  11p66d
0     0    12     264
 

Ответ №3:

Спасибо, что оба работают, что если я хотел бы разделить колонку на 2 части, одну до первой буквы включительно, а вторую часть после

 df.columns.str.split(r"(d D )",n=1,expand=True)
 

работайте, но дайте мне 3 части с первым пробелом