Как сгруппировать данные с похожими датами в панд

#python #pandas

Вопрос:

У меня есть два csv-файла. Оба файла содержат столбец Даты, Запасов, Открытия, Максимума,Минимума,Закрытия за один день. Я сделал один кадр данных из этих двух файлов. Итак, в этом едином фрейме данных 1-й данные запаса 1 печатаются с момента открытия до закрытия дня, а затем данные запаса 2 с момента открытия до конца дня .Данные представлены с интервалом в 15 минут, и день начинается с 2019-01-01 09:15:00 и заканчивается 2019-01-01 15:15:00.

Я хочу создать фрейм данных, в котором будут напечатаны данные stock1 в 2019-01-01 09:15:00, а затем одновременно данные stock2 и так далее для 2019-01-01 09:30:00, 2019-01-01 09:45:00….

Проверьте изображение: введите описание изображения здесь

Ответ №1:


Новый Ответ:

Прочитав ваш ответ, я решил, что лучшим решением вашей проблемы будет перевод ваших данных в формат фрейма данных с 2 индексами с использованием многоиндексных панд

 arrays = [
    np.array(["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"]),
    np.array(["one", "two", "one", "two", "one", "two", "one", "two"]),
]

df = pd.DataFrame(np.random.randn(8, 4), index=arrays)

df
Out[16]: 
                0         1         2         3
bar one -0.424972  0.567020  0.276232 -1.087401
    two -0.673690  0.113648 -1.478427  0.524988
baz one  0.404705  0.577046 -1.715002 -1.039268
    two -0.370647 -1.157892 -1.344312  0.844885
foo one  1.075770 -0.109050  1.643563 -1.469388
    two  0.357021 -0.674600 -1.776904 -0.968914
qux one -1.294524  0.413738  0.276662 -0.472035
    two -0.013960 -0.362543 -0.006154 -0.923061
 

Старый Ответ


Вы можете использовать метод панд concat . Если их формат индекса совпадает, API Pandas позаботится обо всем остальном.

 import pandas as pd
import datetime

idx = pd.date_range("2018-01-01", periods=5, freq="H")
ts = pd.DataFrame(range(len(idx)), index=idx)

|                     |   0 |
|:--------------------|----:|
| 2018-01-01 00:00:00 |   0 |
| 2018-01-01 01:00:00 |   1 |
| 2018-01-01 02:00:00 |   2 |
| 2018-01-01 03:00:00 |   3 |
| 2018-01-01 04:00:00 |   4 |

idy = pd.date_range("2018-01-02", periods=10, freq="H")
tsy = pd.DataFrame(range(len(idy)), index=idy)

|                     |   0 |
|:--------------------|----:|
| 2018-01-02 00:00:00 |   0 |
| 2018-01-02 01:00:00 |   1 |
| 2018-01-02 02:00:00 |   2 |
| 2018-01-02 03:00:00 |   3 |
| 2018-01-02 04:00:00 |   4 |
| 2018-01-02 05:00:00 |   5 |
| 2018-01-02 06:00:00 |   6 |
| 2018-01-02 07:00:00 |   7 |
| 2018-01-02 08:00:00 |   8 |
| 2018-01-02 09:00:00 |   9 |
 

Результат:

 pd.concat([ts, tsy])

|                     |   0 |
|:--------------------|----:|
| 2018-01-01 00:00:00 |   0 |
| 2018-01-01 01:00:00 |   1 |
| 2018-01-01 02:00:00 |   2 |
| 2018-01-01 03:00:00 |   3 |
| 2018-01-01 04:00:00 |   4 |
| 2018-01-02 00:00:00 |   0 |
| 2018-01-02 01:00:00 |   1 |
| 2018-01-02 02:00:00 |   2 |
| 2018-01-02 03:00:00 |   3 |
| 2018-01-02 04:00:00 |   4 |
| 2018-01-02 05:00:00 |   5 |
| 2018-01-02 06:00:00 |   6 |
| 2018-01-02 07:00:00 |   7 |
| 2018-01-02 08:00:00 |   8 |
| 2018-01-02 09:00:00 |   9 |
 

Комментарии:

1. Я уже использовал concat для создания одного фрейма данных. Что я хочу, так это заказать их в соответствии с датой. Например, сначала данные Tatasteel в 9:15, а затем данные Tatamotors в 9:15 и так далее.

2. о, тогда я бы посоветовал вам перенести ваши данные в фрейм данных с 2 индексами с помощью многоиндексного приложения pandas