df = pd.DataFrame() df ['Stats'] = ['Def duels', 'Def duels Won','Back passes', 'Back passes[Acc]','Dribbles', 'Dribbles[Suc]'] df ['Value'] = [5,2.5,60,55,5,2]
我想创建一个新列,它只包含“Won”、“Acc”和“Suc”等字符串。 预期的数据帧如下:
谢谢。
使用 str.contains 具有 np.where
str.contains
np.where
df['stat1'] = np.where(df['Stats'].str.contains('won|acc|suc',case=False),df['Stats'],'') df['Stats'] = np.where(df['Stats'].str.contains('won|acc|suc',case=False),'',df['Stats']) print(df) Stats Value stat1 0 Def duels 5.0 1 2.5 Def duels Won 2 Back passes 60.0 3 55.0 Back passes[Acc] 4 Dribbles 5.0 5 2.0 Dribbles[Suc]
# initialize Stats1 with empty strings df['Stats1'] = '' # copy values from `Stats` df.iloc[1::2,-1] = df['Stats'] # replace the copied values with empty strings df['Stats'] = np.where(df['Stats1'].ne(''), '', df['Stats'])
输出:
Stats Value Stats1 0 Def duels 5.0 1 2.5 Def duels Won 2 Back passes 60.0 3 55.0 Back passes[Acc] 4 Dribbles 5.0 5 2.0 Dribbles[Suc]
IIUC公司
s=df.Stats.str.contains('Won|Acc|Suc') df['New']=df.Stats.where(s,'') df.Stats=df.Stats.mask(s,'') df Stats Value New 0 Def duels 5.0 1 2.5 Def duels Won 2 Back passes 60.0 3 55.0 Back passes[Acc] 4 Dribbles 5.0 5 2.0 Dribbles[Suc]