我想读取 DataFrame 列表的每第 n 行,并通过 append 所有第 N 行来创建一个新的 DataFrame。
假设我们有以下 DataFrame:
>>> df1
A B C D
0 -0.8 -2.8 -0.3 -0.1
1 -0.1 -0.9 0.2 -0.7
2 0.7 -3.3 -1.1 -0.4
>>> df2
A B C D
0 1.4 -0.7 1.5 -1.3
1 1.6 1.4 1.4 0.2
2 -1.4 0.2 -1.7 0.7
>>> df3
A B C D
0 0.3 -0.5 -1.6 -0.8
1 0.2 -0.5 -1.1 1.6
2 -0.3 0.7 -1.0 1.0
我使用了以下方法来获得所需的 df:
df = pd.DataFrame()
df_list = [df1, df2, df3]
for i in range(len(df1)):
for x in df_list:
df = df.append(x.loc[i], ignore_index = True)
结果如下:
>>> df
A B C D
0 -0.8 -2.8 -0.3 -0.1
1 1.4 -0.7 1.5 -1.3
2 0.3 -0.5 -1.6 -0.8
3 -0.1 -0.9 0.2 -0.7
4 1.6 1.4 1.4 0.2
5 0.2 -0.5 -1.1 1.6
6 0.7 -3.3 -1.1 -0.4
7 -1.4 0.2 -1.7 0.7
8 -0.3 0.7 -1.0 1.0
我只是想知道是否有 pandas 重写这段代码的方法可以做同样的事情(可能通过使用 .iterrows、pd.concat、pd.join 或 pd.merge)?
干杯
更新 简单地一个接一个地 append df 不是我在这里寻找的。p>
代码应该做的:
df.row1 = df1.row1
df.row2 = df2.row1
df.row3 = df3.row1
df.row4 = df1.row2
df.row5 = df2.row2
df.row6 = df3.row2
...
最佳答案
对于单个输出数据帧,您可以按索引连接和排序:
res = pd.concat([df1, df2, df3]).sort_index().reset_index(drop=True)
A B C D
0 -0.8 -2.8 -0.3 -0.1
1 1.4 -0.7 1.5 -1.3
2 0.3 -0.5 -1.6 -0.8
3 -0.1 -0.9 0.2 -0.7
4 1.6 1.4 1.4 0.2
5 0.2 -0.5 -1.1 1.6
6 0.7 -3.3 -1.1 -0.4
7 -1.4 0.2 -1.7 0.7
8 -0.3 0.7 -1.0 1.0
对于数据框的字典,您可以连接然后按索引分组:
res = dict(tuple(pd.concat([df1, df2, df3]).groupby(level=0)))
使用上面定义的字典,每个值代表一个行号。例如,res[0]
将给出每个输入数据帧的第一行。
关于python - 根据每个单独数据帧的行索引(编号)连接/加入/合并多个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52609858/