Ich habe eine Reihe, die Unternehmen enthält und deren Aktiennamen verbunden sind:
stock
0 AAPLApple
1 AMZNAmazon.com
2 FBFacebook
3 NFLXNetflix
4 INTCIntel
5 TSLATesla
6 MUMicron Technology
7 MSFTMicrosoft
8 NVDANVIDIA
9 CSCOCisco Systems
11 LULULululemon Athletica
12 EBAYeBay
13 AVGOBroadcom
14 QCOMQUALCOMM
15 GILDGilead Sciences
16 WDCWestern Digital
17 GOOGLAlphabet
18 BIIBBiogen
19 GOOGAlphabet
20 URBNUrban Outfitters
21 NTAPNetApp
22 AABAAltaba
23 SBUXStarbucks
24 CELGCelgene
25 SPLKSplunk
26 COSTCostco Wholesale
27 AMDAdvanced Micro Devices
28 PYPLPaypal
29 REGNRegeneron Pharmaceuticals
30 AMATApplied Materials
...
Name: stock, Length: 243, dtype: object
Ich habe auch eine Liste der Aktiensymbole, mit denen ich übereinstimmen kann:
['ETSY',
'COUP',
'TSLA',
'CRWD',
'ROKU',
'A',
'AAL',
'AAP',
'AAPL',
'ABBV',
'AEP',
'AES',
'AFL',
'HUBS',
'AIG',
'AIV',
'AIZ',
'AJG',
'AKAM',
'ALB',
'ALGN',
'ALK',
'ALL',
'ALLE',
'ALXN',
'AMAT',
'AMCR',
'AMD',
'AME',
'AMGN',
'AMP',
'AMT',
'AMZN',
...]
Ich möchte übereinstimmen, um jeden Namen in der Aktienspalte des vollständigen Firmennamens zu entfernen und nur das Symbol zu belassen. Wenn das Symbol nicht gefunden wird, lassen Sie die Zeile fallen. Mein Code bisher:
def clean_name(name):
companies = list(COMPANIES.keys())
for company in companies:
if company in name:
return company
return None
def sort_df():
df[STOCK] = df[STOCK].apply(lambda x: clean_name(x))
df = df.dropna()
return df
Das Problem ist, dass jede Übereinstimmung von Zeichenfolgen in den meisten Fällen nur einen Buchstaben zurückgibt.
Die Ausgabe lautet also:
0 A
1 A
2 F
3 F
4 C
5 TSLA
6 MU
7 F
8 A
9 C
11 A
12 A
13 A
14 A
15 D
16 C
17 A
18 BIIB
19 A
20 O
21 A
22 A
23 SBUX
24 C
25 SPLK
26 C
27 A
28 L
29 RE
30 A
...
Eine Idee ist die umgekehrte Sortierung nach Länge für die ersten längsten Firmennamen:
def clean_name(name):
companies = list(COMPANIES.keys())
for company in sorted(companies, key=len, reverse=True):
if company in name:
return company
return None
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen