повторы на основе второго кадра - PullRequest
1 голос
/ 30 марта 2020

Я хотел бы попросить вас о поддержке. Я пробовал много вещей, но безуспешно.

Предположим, у вас есть два разных кадра: длинный кадр (LF) (большое количество строк) и короткий кадр (SF) (небольшое количество строк), см. Пример

SF=pd.DataFrame({"col1":[1,2,3],"col2":[4,5,6]})
LF=pd.DataFrame({"col_long":[1,2,3,4,5,6,7,8,9,10,11]})

Мне нужно l oop через значения определенного столбца c из короткого кадра, скажем, мы берем "Test col2" и объединяем вдоль оси 1 оба кадра. У меня есть решение, которое работает, как это:

EMPTY_FRAME=pd.DataFrame()
SF=pd.DataFrame({"col1":[1,2,3],"col2":[4,5,6]})
LF=pd.DataFrame({"col_long":[1,2,3,4,5,6,7,8,9,10,11]})


for i in range(len(SF.index)):
    LF["col1"]=SF["col1"].values[i]
    LF["col2"]=SF["col2"].values[i]
    EMPTY_FRAME=EMPTY_FRAME.append(LF)

LF=   col_long  col1  col2
0          1     1     4
1          2     1     4
2          3     1     4
3          4     1     4
4          5     1     4
5          6     1     4
6          7     1     4
7          8     1     4
8          9     1     4
9         10     1     4
10        11     1     4
0          1     2     5
1          2     2     5
2          3     2     5
3          4     2     5
4          5     2     5
5          6     2     5
6          7     2     5
7          8     2     5
8          9     2     5
9         10     2     5
10        11     2     5
0          1     3     6
1          2     3     6
2          3     3     6
3          4     3     6
4          5     3     6
5          6     3     6
6          7     3     6
7          8     3     6
8          9     3     6
9         10     3     6
10        11     3     6

, но становится довольно запутанным, поскольку у меня много столбцов внутри SF, и поэтому я могу забыть некоторые столбцы. Итак, вопрос: есть ли шанс найти следующее решение лучше и короче?

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

1 Ответ

1 голос
/ 30 марта 2020

Вы можете перекрестное соединение с переиндексацией, чтобы сохранить порядок:

out = (SF.assign(k=1).merge(LF.assign(k=1),on='k').drop('k',1)
   .reindex(columns=LF.columns.union(SF.columns,sort=False)))

out.index = out['col_long'].factorize()[0] #if required

print(out)

    col_long  col1  col2
0          1     1     4
1          2     1     4
2          3     1     4
3          4     1     4
4          5     1     4
5          6     1     4
6          7     1     4
7          8     1     4
8          9     1     4
9         10     1     4
10        11     1     4
0          1     2     5
1          2     2     5
2          3     2     5
3          4     2     5
4          5     2     5
5          6     2     5
6          7     2     5
7          8     2     5
8          9     2     5
9         10     2     5
10        11     2     5
0          1     3     6
1          2     3     6
2          3     3     6
3          4     3     6
4          5     3     6
5          6     3     6
6          7     3     6
7          8     3     6
8          9     3     6
9         10     3     6
10        11     3     6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...