我有以下資料框,除此之外還有其他類別,cat1但我只想更改類別所在的資料框部分cat1。
name short code category
thyrax thx thxar.po cat1
gha gh gh.cd cat1
play pl pl.v cat1
xxdx xd xda.v cat1
......
對于這里的一切后,案件.中的代碼列是什么,再說.cd,我想短柱采取什么短期柱 什么是后.在code列,并成為類似thx.po,但在情況下,有一個cd,我希望它成為.cn. 我希望輸出看起來像這樣,
name short code category
thyrax thx.po thxar.po cat1
gha gh.cn gh.cd cat1
play pl.v pl.v cat1
xxdx xd.v xda.v cat1
......
不知道怎么加上IFcategory iscat1 和.is后面的代碼的條件,.cd變成short 后面的. cn 。
我希望所有內容都具有相同的條件,除非.要復制的內容之后的.內容,但如果是 a之后的內容.cn,我希望它是 a .cd。最好的方法是什么?
到目前為止,我已經得到了這個代碼,
df['short'] = (df['short'].add("." df['code'].str.split(".").str[-1]).where(df['category'].eq("cat1"),df['short']))
但是我不知道如何添加條件,如果在代碼列中,在.is之后出現什么.cd并發生不同的事情。
所以基本上我的條件是這樣的,
首先,類別必須是cat1,
然后取短列中的內容并將其與.代碼列中的內容合并。
如果.代碼欄中的 之后是cd,則將其變成cn.
uj5u.com熱心網友回復:
試試這個:
df['short'] = df['short'].astype(str) np.where(df['category'].eq('cat1'), df['code'].astype(str).str.extract('(\.. )')[0].replace('.cd', '.cn'), '')
輸出:
>>> df
name short code category
0 thyrax thx.po thxar.po cat1
1 gha gh gh.cd cat2
2 gha gh.cn gh.cd cat1
3 play pl.v pl.v cat1
4 xxdx xd xda.v cat2
5 xxdx xd xda.v cat2
6 xxdx xd.v xda.v cat1
(我在上面的資料中添加了一些虛擬行來證明它適用于正確的類別,cat1。)
uj5u.com熱心網友回復:
嘗試:
mask = df['category'] == 'cat1'
df.loc[mask, 'short'] = '.' df.loc[mask, 'code'] \
.str.split('.').str[1].replace({'cd': 'cn'})
print(df)
# Output:
name short code category
0 thyrax thx.po thxar.po cat1
1 gha gh.cd gh.cd cat1
2 play pl.v pl.v cat1
3 xxdx xd.v xda.v cat1
uj5u.com熱心網友回復:
def custom_apply_function(row):
if row['category'] != 'cat1':
return row.short
code_after_dot = row.code.split('.')[1]
if code_after_dot == 'cd':
code_after_dot = 'cn'
new_short = row.short '.' code_after_dot
return new_short
df.apply(axis=1, func=custom_apply_function)
回報
0 thx.po
1 gh.cn
2 pl.v
3 xd.v
由于矢量化,該執行緒中的其他答案肯定更快。如果您想讓條件進一步復雜化,我會選擇更明確的版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/387568.html
