1

我想请求您的支持。我尝试了很多东西,但没有成功。

假设您有两个不同的帧,一个长帧 (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]})

我需要遍历短帧中特定列的值,假设我们采用“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 中有很多列,因此我可能会忘记一些列,因此变得相当混乱。所以问题是:有没有机会以更好和更短的方式提供以下解决方案?

如果你们知道如何进一步改进我的代码,我将不胜感激

4

1 回答 1

1

您可以使用 reindex 交叉连接以保留顺序:

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
于 2020-03-30T16:01:03.480 回答