Я пытаюсь проиндексировать данные в Excel, используя Python. У меня есть рабочий код, но он очень неэффективен, так как мне приходится работать с одним фреймом данных, который имеет много разных имен столбцов, и индексировать данные соответствия из фрейма данных, в котором их всего несколько.
Поэтому я скопировал тот же код, что и 10 раз, и он занимает много памяти. Так что он должен быть более эффективным. Поэтому я думаю, что использование номеров столбцов вместо имен было бы более полезным, поскольку все это можно было бы сделать в двух фреймах данных, а не копировать один и тот же фрейм данных 10 раз, просто чтобы изменить значения столбца.
Вот как я фрейм данных выглядит так:
Name Location Date Open-1 High-1 low-1 close-1 Date Open High Low Close
1 Orange Minsk 20200504 NaN NaN NaN NaN 20200505 NaN NaN NaN NaN
2 Steak Dallas 20200505 NaN NaN NaN NaN 20200506 NaN NaN NaN NaN
Значения NaN должны быть заполнены данными из фрейма данных, который выглядит следующим образом:
Name Date Time Open High Low Close Volume VWAP Trades
0 Orange 20200504 15:30:00 3.70 3.97 3.65 3.75 1000 3.60 55
1 Orange 20200504 17:00:00 3.65 3.95 3.50 3.80 1200 3.65 68
2 Orange 20200504 20:00:00 3.50 3.83 3.44 3.60 1300 3.73 71
3 Orange 20200504 22:00:00 3.55 3.58 3.35 3.57 1400 3.78 81
4 Orange 20200505 15:30:00 3.50 3.85 3.45 3.70 1500 3.73 95
5 Orange 20200505 17:00:00 3.65 3.70 3.50 3.60 1600 3.65 54
6 Orange 20200505 20:00:00 3.80 3.85 3.45 3.81 1700 3.73 41
7 Orange 20200505 22:00:00 3.60 3.84 3.45 3.65 1800 3.75 62
0 Steak 20200505 10:00:00 8.70 8.97 8.65 8.75 1000 8.60 55
1 Steak 20200505 12:00:00 8.65 8.95 8.50 8.80 1200 8.65 68
2 Steak 20200505 14:00:00 8.50 8.83 8.44 8.60 1300 8.73 71
3 Steak 20200505 16:00:00 8.55 8.58 8.35 8.57 1400 8.78 81
4 Steak 20200506 10:00:00 8.50 8.85 8.45 8.70 1500 8.73 95
5 Steak 20200506 12:00:00 8.65 8.70 8.50 8.60 1600 8.65 54
6 Steak 20200506 14:00:00 8.80 8.85 8.45 8.81 1700 8.73 41
7 Steak 20200506 16:00:00 8.60 8.84 8.45 8.65 1800 8.75 62
Как видите, столбцы только во втором фрейме данных имеют значения «Open», «High» и т. д. c .. в то время как первый фрейм данных также имеет имена столбцов, называемые «Open-1», «High-1», и т. д. c.
код, который я сейчас использую для индексации / сопоставления данных:
rdf13 = rdf12.groupby(['Name','Date']).agg(Open=('Open','first'),High=('High','max'),Low=('Low','min'), Close=('Close','last'),Volume=('Volume','sum'),VWAP=('VWAP','mean'),Trades=('Trades','sum')).reset_index()
result11 = pd.merge(rdf13, rdf11, how='inner', on=['Name', 'Date']).iloc[:,:-4].dropna(1).rename(columns = {"Open_x": "Open", "High_x": "High", "Low_x": "Low", "Close_x": "Close", "Volume_x": "Volume", "VWAP_x": "VWAP", "Trades_x": "Trades"})
result12 = result11.reindex(index=result11.index[::-1])
result13 = result12[['Name', 'Location', 'Date', 'Check_2','Open', 'High', 'Low', 'Close', 'Volume', 'VWAP', 'Trades']].reset_index()
readfile11 = pd.read_excel("Trackers\TEST Tracker.xlsx")
readfile11['Count'] = np.arange(len(readfile11))
df11 = readfile11.set_index(['Name', 'Location', 'Date'])
df12 = result13.set_index(['Name', 'Location', 'Date'])
fdf11 = df12.combine_first(df11).reset_index().reindex(readfile11.columns, axis=1).sort_values('Count').drop_duplicates()
, но для того, чтобы этот код индексировал данные в столбцы «-1», его необходимо скопировать, а имена нужно изменить . Я решил, что использование номеров столбцов вместо имен может оказаться более эффективным.
Желаемый результат:
Name Location Date Open-1 High-1 low-1 close-1 Date Open High Low Close
1 Orange Minsk 20200504 3.7 3.97 3.35 3.57 20200505 3.5 3.85 3.45 3.65
2 Steak Dallas 20200505 8.7 8.97 8.35 8.57 20200506 8.5 8.85 8.45 8.45