[英]Creating a new column based on values from other columns in python pandas
[英]Python pandas - new column based on other columns (String)
我在stackoverflow中找不到它,所以我想問這個問題。
假設我有兩列:數據框中的 A、B 僅由一堆單詞組成,並且我想創建一個新列 C,根據以下規則它只是 TRUE/FALSE:
If word in B = word in A + 'ing', then it's True or vice versa
If word in B = word in A + 'ment', then it's True of vice versa.
所以我定義了以下function:
def parts_of_speech(s1, s2):
return s1+'ing'==s2 or s1+'ment'==s2 or s1+s1[-1]+'ing'==s2
例如
A B C
Engage Engagement True
Go Going True
Axe Axis False
Management Manage True
我嘗試了以下方法:
df['C']=df.apply(lambda x: parts_of_speech(x.A, x.B) or
parts_of_speech(x.B, x.A) )
或者
df['C']=df.apply(parts_of_speech(df['A'], df['B']) or
parts_of_speech(df['A'], df['B']) )
我犯了同樣的錯誤:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
我不知道我做錯了什么。 有一個簡單的解決方法嗎?
任何幫助將不勝感激。
.apply 默認使用列。 您的示例中需要的唯一更改是添加axis=1
以應用於行:
df['C']=df.apply(lambda x: parts_of_speech(x.A, x.B) or parts_of_speech(x.B, x.A),
axis=1)
對於您的示例數據:
# make B the longer words
df[['A','B']] = np.sort(df[['A','B']])
# split by suffixes
df['B'].str.extract('(\w+)(ment|ing)$',expand=True)[0].eq(df['A'])
或使用您的方法,但矢量化:
# make B the longer words
df[['A','B']] = np.sort(df[['A','B']])
df['A-ing'] = df['A'] + 'ing'
df['A-ment'] = df['A'] + 'ment'
df.iloc[:,-2].eq(df['A']).all(1)
Output:
0 True
1 True
2 False
3 True
dtype: bool
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.