熊貓操縱DF的問題在這裏搜索並從特定記錄/索引一個數據幀中添加值在特定的行/指數另一DF
我要創造我原來的DF(DF)的新列是來自另一個DF(dfKey)的特定索引處的值。
我有點卡住(我敢肯定我錯過了一些明顯的東西,但我無法解碼當前錯誤消息'KeyError: 'Name'
)。
數據:
import numpy as np
import pandas as pd
raw_data = {'Code': [250, 200, 875, 1200],
'Metric1': [1.4, 350, 0.2, 500],
'Metric999': [1.2, 375, 0.22, 505],}
df = pd.DataFrame(raw_data, columns = ['Code','Metric1', 'Metric999',])
df.set_index('Code', inplace=True) #Set Code as Row Index
print(df)
raw_dataKey = {'Code': [250, 1200, 205, 2899, 875, 5005],
'Ticker': ['NVID', 'ATVI', 'CRM', 'GOOGL', 'TSLA','GE', ],
'Name': ['NVIDA Corp', 'Activision', 'SalesForce', 'Googlyness', 'Tesla Company','General Electric']}
dfKey = pd.DataFrame(raw_dataKey , columns = ['Code','Ticker', 'Name'])
dfKey.set_index('Code', inplace=True) #Set Code as Row Index
print(dfKey)
所需的輸出(df.head()
):
Ticker Name Code Metric1 Metric999
Code
250 NVID NVIDA Corp 250 1.4 1.20
200 NaN NaN 200 350.0 375.00
875 TSLA Tesla Company 875 0.2 0.22
1200 ATVI Activision 1200 500.0 505.00
我認爲要做到這一點的最好辦法是一個for循環,因爲所有其他的方法我已經嘗試過(比如df['Name']=np.where(df['Code']==dfKey['Code'], dfKey['Name'])
)只能比較/測試相同索引下的每一行;沒有搜索。
我的最新嘗試:
codes=df.index.tolist()
codes
for code in codes:
#1. Find Name and Ticker in Key
name = dfKey['Name'].loc[code]
ticker = dfKey['Ticker'].loc[code]
#2. Put Name and Ticker back in original
df['Name'].loc[code] = name
df['Ticker'].loc[code] = ticker
Oh Duhh!我知道必須有一個更簡單的方法來做到這一點(需要愛Python語法)。速度的頂級答案(儘管我認爲MaxU的形式更加優雅)!謝謝! – whs2k