#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 части с первым пробелом