[英]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.