簡體   English   中英

根據單元格和列名更改 dataframe 中的值

[英]Changing values in dataframe based on cell and column name

我有一個 dataframe

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

現在我想應用 2 * value *(列名的最后一個數字)。 例如最后 2 * 2* 66

Df.apply(lambda x: 2*x)用於第 1 步

第 2 步是最難的部分

可以執行 new dataframe 之類的df2=df.stack().reset_index().apply(lambda x: x[re.search('[azAZ]+',x).end():]) ,然后將2倍增。

什么是更蟒蛇的方式?

對於 DataFrame:

   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

聚會遲到了,找到了幾乎相同的答案,但使用了否定的后視正則表達式:

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

謝謝,如果我想將列分成兩部分,一個到並包括第一個字母,第二個是后面的部分,這兩者都有效

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

工作,但給我一個第一個空白的 3 部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM