我正在尝试使用Python在Excel中建立数据索引。我有一个有效的代码,但是效率很低,因为我必须处理一个具有很多不同列名的数据框,并且索引匹配只有几个数据框的数据。
因此,我复制了相同的代码(例如10次),这占用了大量内存。因此,它必须更加高效。因此,我认为使用列号代替名称会更有用,因为所有操作都可以在2个数据帧中完成,而不是将相同的数据帧复制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”等。而第一个数据帧中也具有名为“ Open-1”,“ High-1”的列名称,等
我当前用于索引/匹配数据的代码是:
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