【发布时间】:2022-01-25 01:47:45
【问题描述】:
我在互联网上搜索了我的问题的解决方案,但我找不到它。 我有以下数据框
pos1 pos2 pos3
0 A A A
1 B B B
2 C C C
3 D D D
4 E E E
5 F F F
6 G G G
7 H H H
8 I I I
我想将以下数据框添加到现有数据框:
pos1 pos2 pos3
0 A B C
1 A B C
2 A B C
3 D E F
4 D E F
5 D E F
6 G H I
7 G H I
8 G H I
这样我得到以下数据框:
pos1 pos2 pos3
0 A A A
1 B B B
2 C C C
3 D D D
4 E E E
5 F F F
6 G G G
7 H H H
8 I I I
9 A B C
10 A B C
11 A B C
12 D E F
13 D E F
14 D E F
15 G H I
16 G H I
17 G H I
我知道行数总是列数的倍数。这意味着如果我有 4 列,那么行应该是 4、8、12、16 等。我的示例是列是 3,行是 9
然后我想要做的是将行转换为列,但仅针对该列数。所以我希望前 3 行与列一起转置,然后是接下来的 3 行,依此类推。
我现在有以下代码:
import pandas as pd
import io
s = """pos1 pos2 pos3
A A A
B B B
C C C
D D D
E E E
F F F
G G G
H H H
I I I
"""
df = pd.read_csv(io.StringIO(s), delim_whitespace=True)
final_df = df.copy()
index_values = final_df.index.values
value = 0
while value < len(df.index):
sub_df = df[value:value+3]
sub_df.columns = index_values[value: value + 3]
sub_df = sub_df.T
sub_df.columns = df.columns
final_df = pd.concat([final_df, sub_df])
value += len(df.columns)
final_df = final_df.reset_index(drop=True)
print(final_df)
由于forloop,我现在的代码很慢。 不使用forloop是否可以得到同样的解?
【问题讨论】: