Я ищу решение для чтения двух предыдущих строк, где C_1=104, и следующих двух строк, где C_1=105, также включает эти две строки. Ниже приведены различные входные данные.
Проблема, с которой я столкнулся:
Cond 1 - иногда C_1=104 является первой строкой (см. df2) в кадре данных, чтобы не было предыдущих строк.
Cond 2 – иногда C_1=104 отсутствует, но C_1=105 — это первая строка (см. df3).Cond 3 — иногда Cond-1 и 2 могут быть другими, что означает, что C_1=105 может быть последней строкой (см. df4) ИЛИ C_1=104, можем ли мы быть последними (C_1=105 там не будет).< /p>
df1 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:50" 101 128 89 4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
"""), sep="\s+")
Вывод df-1-
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
df2 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
"""), sep="\s+")
Вывод df-2-
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
df3 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
"""), sep="\s+")
Вывод df-3-
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
df4 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:50" 101 128 89 4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"""), sep="\s+")
Вывод df-4-
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
Я нашел решение и все еще ищу лучший способ его достижения -
idx1 = df1[(df1['C_1'] == 104) & (df1['C_2'] == 132)].index
idx2 = df1[(df1['C_1'] == 105) & (df1['C_2'] == 134)].index
df_1 = pd.DataFrame()
df_2 = pd.DataFrame()
if idx1.size != 0:
df_1 = df1.loc[idx1[0]-2:idx1[0], :]
if idx2.size != 0:
df_2 = df1.loc[idx2[0]:idx2[0]+2, :]
df_merged = pd.concat([df_1, df_2], ignore_index=True).sort_values(by='datetime')
Подробнее здесь: https://stackoverflow.com/questions/786 ... ons-are-me
Прочитайте предыдущие и следующие две строки из определенного индекса везде, где выполняются условия из кадра данных pan ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение