[英]Create new Python DataFrame column based on conditions of multiple other columns
[英]Constructing a dataframe with multiple columns based on str conditions using a loop - python
我有一個包含用戶位置的webscraped Twitter DataFrame。 位置變量如下所示:
2 Crockett, Houston County, Texas, 75835, USA
3 NYC, New York, USA
4 Warszawa, mazowieckie, RP
5 Texas, USA
6 Virginia Beach, Virginia, 23451, USA
7 Louisville, Jefferson County, Kentucky, USA
我想通過循環為美國所有州構建州假人。
我設法使用以下方法從美國提取用戶
location_usa = location_df['location'].str.contains('usa', case = False)
但是我為每個狀態編寫的代碼太龐大了。 我有狀態列表作為字符串。 我也無法使用
pd.Series.Str.get_dummies()
因為同一狀態下有不同的位置,每個條目都是一個完整的句子。
我希望輸出看起來像這樣:
Alabama Alaska Arizona
1 0 0 1
2 0 1 0
3 1 0 0
4 0 0 0
或與布爾值相同。
使用.str.extract
得到一個Series
的狀態,然后用pd.get_dummies
在該Series
。 將需要定義所有50個狀態的列表:
import pandas as pd
states = ['Texas', 'New York', 'Kentucky', 'Virginia']
pd.get_dummies(df.col1.str.extract('(' + '|'.join(x+',' for x in states)+ ')')[0].str.strip(','))
Kentucky New York Texas Virginia
0 0 0 1 0
1 0 1 0 0
2 0 0 0 0
3 0 0 1 0
4 0 0 0 1
5 1 0 0 0
請注意,我在州后面加了一個','
因為這似乎是一種模式,可以避免出現'Virginia'
與'Virginia Beach'
類'Virginia'
錯誤匹配,或者避免諸如'Washington County, Minnesota'
如果您希望多個狀態在一行上匹配,那么.extractall
變成.extractall
在第0級進行求和:
pd.get_dummies(df.col1.str.extractall('(' + '|'.join(x+',' for x in states)+ ')')[0].str.strip(',')).sum(level=0).clip(upper=1)
編輯:
也許有更好的方法,但是@BradSolomon允許在'State,( optional 5 digit Zip,) USA'
進行匹配
states = ['Texas', 'New York', 'Kentucky', 'Virginia', 'California', 'Pennsylvania']
pat = '(' + '|'.join(x+',?(\s\d{5},)?\sUSA' for x in states)+ ')'
s = df.col1.str.extract(pat)[0].str.split(',').str[0]
s
0 Texas
1 New York
2 NaN
3 Texas
4 Virginia
5 Kentucky
6 Pennsylvania
Name: 0, dtype: object
來自輸入
col1
0 Crockett, Houston County, Texas, 75835, USA
1 NYC, New York, USA
2 Warszawa, mazowieckie, RP
3 Texas, USA
4 Virginia Beach, Virginia, 23451, USA
5 Louisville, Jefferson County, Kentucky, USA
6 California, Pennsylvania, USA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.