Pandas индекс соответствия нескольким фреймам данных по номеру столбца с несколькими критериями - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь проиндексировать данные в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...