合并多个DataFrames[英] Merge multiple DataFrames

本文是小编为大家收集整理的关于合并多个DataFrames的处理方法,想解了合并多个DataFrames的问题怎么解决?合并多个DataFrames问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

这个问题是指上一篇文章

建议的解决方案对于较小的数据集非常有效,这里我使用 7 个 .txt 文件进行操作,总内存为 750 MB.这不应该太大,所以我一定是在这个过程中做错了什么.

df1  = pd.read_csv('Data1.txt', skiprows=0, delimiter=' ', usecols=[1,2, 5, 7, 8, 10, 12, 13, 14])
df2  = pd.read_csv('Data2.txt', skiprows=0, delimiter=' ', usecols=[1,2, 5, 7, 8, 10, 12, 13, 14])
df3  = ...
df4 = ...

这就是我的一个数据框 (df1) 的样子 - 头:

  name_profile depth           VAR1  ...  year  month  day
0  profile_1   0.6           0.2044  ...  2012     11  26
1  profile_1   0.6           0.2044  ...  2012     11  26
2  profile_1   1.1           0.2044  ...  2012     11  26
3  profile_1   1.2           0.2044  ...  2012     11  26
4  profile_1   1.4           0.2044  ...  2012     11  26
...

还有尾巴:

       name_profile     depth              VAR1  ...  year  month  day
955281  profile_1300   194.600006          0.01460  ...  2015      3  20
955282  profile_1300   195.800003          0.01095  ...  2015      3  20
955283  profile_1300   196.899994          0.01095  ...  2015      3  20
955284  profile_1300   198.100006          0.00730  ...  2015      3  20
955285  profile_1300   199.199997          0.01825  ...  2015      3  20

我按照建议删除了重复项:

df1.drop_duplicates()
...

等等

同样,df2 有 VAR2、df3 VAR3 等

解决方案根据上一篇文章的其中一个答案进行了修改.

目标是创建一个新的、合并的 DataFrame,其中所有VARX(每个dfX的)作为深度、轮廓和其他3个的附加列,所以我尝试了这样的事情:

dfs = [df.set_index(['depth','name_profile', 'year', 'month', 'day']) for df in [df1, df2, df3, df4, df5, df6, df7]]

df_merged = (pd.concat(dfs, axis=1).reset_index())

当前的错误是:

ValueError:无法处理非唯一的多索引!

我做错了什么?

推荐答案

再次考虑使用 pandas.concat 的水平串联.因为您有多行共享相同的 profile、depth、year、month 和 day,将运行计数 cumcount 添加到 mult-index 中,使用 groupby().cumcount() 计算:

grp_cols = ['depth', 'name_profile', 'year', 'month', 'day']

dfs = [(df.assign(grp_count = df.groupby(grp_cols).cumcount())
          .set_index(grp_cols + ['grp_count'])
       ) for df in [df1, df2, df3, df4, df5, df6, df7]]

df_merged = pd.concat(dfs, axis=1).reset_index()

print(df_merged)

本文地址:https://www.itbaoku.cn/post/1728150.html