我有一個 Python 資料框列Name,它的元素總是包含名字、姓氏和單詞“over”或“under”
例如:Name=[Michael Johnson Over, Michael Johnson Under, John Smith Over, John Smith Under]
我正在嘗試創建一個新列Name2,從中提取“Over”或“Under”Name
所以對于上面的例子Name2=[Over, Under, Over, Under]
我已經嘗試了.split& 的不同變體,findall但無法弄清楚如何獲得一個新的列,其中只有Over或Under在其中,請幫助!
uj5u.com熱心網友回復:
.str是pd.Series公開字串決議功能的屬性,例如.contains. 您可以使用布爾索引設定一個新列,其中條件是 in"Name"中的行是否包含關鍵字"Over"or "Under"。
import pandas as pd
df = pd.DataFrame(
{
"Name": [
"Michael Johnson Over",
"Michael Johnson Under",
"John Smith Over",
"John Smith Under"
],
}
)
df["Name2"] = None
df["Name2"][df["Name"].str.contains("Over")] = "Over"
df["Name2"][df["Name"].str.contains("Under")] = "Under"
print(df)
輸出
Name Name2
0 Michael Johnson Over Over
1 Michael Johnson Under Under
2 John Smith Over Over
3 John Smith Under Under
uj5u.com熱心網友回復:
您可以使用 Pandasrsplit從末尾拆分字串,并使用n引數將輸出中的拆分次數限制為 1。您還可以使用expand=True將字串拆分為單獨的列。
df[['First_Last','Name2']] = df['Name'].str.rsplit(' ', n=1, expand=True)
輸出
Name First_Last Name2
0 Michael Johnson Over Michael Johnson Over
1 Michael Johnson Under Michael Johnson Under
2 John Smith Over John Smith Over
3 John Smith Under John Smith Under
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/369018.html
上一篇:python用條件求和一列的值
下一篇:用行中的閾值過濾掉值并獲得平均值
