python - 根据每个单独数据帧的行索引(编号)连接/加入/合并多个数据帧

标签 python pandas join merge append

我想读取 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 不是我在这里寻找的。

代码应该做的:

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/

相关文章:

python - Foursquare API 请求在版本参数上返回错误

python - 如何在单列的 Pandas 数据框上追加新行?

java - 来自一个连接表的多个@ManyToMany 集

mysql - 在一个表中使用联接

python - 在 python 异常中获取回溯

python - 将 Autocomplete=off 应用到 Django 密码重置确认表单

python - 使用groupby对A列进行分组,然后根据B列创建一个列表

mysql - 我应该用什么代替 IN?

python - 尝试编译扩展类型时出现 CompileError

python - 将字符串参数传递给 Xpath