我在熊貓中有 2 列,資料看起來像這樣。
code fx category
AXD AXDG.R cat1
AXF AXDG_e.FE cat1
333 333.R cat1
....
還有其他類別,但我只對 cat1 感興趣。
我想組合code列中的所有內容以及列中之后的所有內容,并.在fx不影響其他行的情況下用新組合替換代碼列。
code fx category
AXD.R AXDG.R cat1
AXF.FE AXDG_e.FE cat1
333.R 333.R cat1
.....
這是我的代碼,我想我必須使用正則運算式,但我不確定如何以這種方式組合它。
df.loc[df['category']== 'cat1', 'code'] = df[df['category'] == 'cat1']['code'].str.replace(r'[a-z](?=\.)', '', regex=True).str.replace(r'_?(?=\.)','', regex=True).str.replace(r'G(?=\.)', '', regex=True)
我也不確定如何選擇第二列。任何幫助將不勝感激。
uj5u.com熱心網友回復:
您可以extract將其部分fx附加到code:
df['code'] = df['fx'].str.extract('(\..*$)')[0]
輸出:
code fx category
0 AXD.R AXDG.R cat1
1 AXF.FE AXDG_e.FE cat1
2 333.R 333.R cat1
要限制cat1只:
df.loc[df['category'].eq('cat1'), 'code'] = df['fx'].str.extract('(\..*$)')[0]
uj5u.com熱心網友回復:
還有其他類別,但我只對 cat1 感興趣
您可以使用str.splitwithseries.where為 cat1 添加擴展名:
df['code'] = (df['code'].add("." df['fx'].str.split(".").str[-1])
.where(df['category'].eq("cat1"),df['code']))
print(df)
code fx category
0 AXD.R AXDG.R cat1
1 AXF.FE AXDG_e.FE cat1
2 333.R 333.R cat1
uj5u.com熱心網友回復:
您可以使用Series.str.extract:
df['code'] = df['code'].astype(str) np.where(df['category'].eq('cat1'), df['fx'].astype(str).str.extract('(\.. )')[0], '')
輸出:
>>> df
code fx category
0 AXD.R AXDG.R cat1
1 AXF.FE AXDG_e.FE cat1
2 333.R 333.R cat1
uj5u.com熱心網友回復:
我們可以split像這樣使用得到預期的結果:
>>> df['code'] = df['code'] '.' df['fx'].str.split(pat=".", expand=True)[1]
>>> df
code fx category
0 AXD.R AXDG.R cat1
1 AXF.FE AXDG_e.FE cat1
2 333.R 333.R cat1
要僅過濾cat1,因為@anky 做得很好,我們可以添加一條where陳述句:
>>> df['code'] = (df['code'] '.' df['fx'].str.split(pat=".", expand=True)[1]).where(df['category'].eq("cat1"), df['code'])
uj5u.com熱心網友回復:
替換點之前的字母數字。將結果附加到列代碼。
df['code'] =df['fx'].str.replace('(^[\w] (?=\.))','',regex=True)
code fx category
0 AXD.R AXDG.R cat1
1 AXF.FE AXDG_e.FE cat1
2 333.R 333.R cat1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387646.html
上一篇:如何根據名稱從串列中獲取重復項
