我肯定在这里遗漏了一些简单的东西.尝试在大多数具有相同列名的pandas中合并两个数据帧,但右侧数据框有一些左侧没有的列,反之亦然.
>df_may
id quantity attr_1 attr_2
0 1 20 0 1
1 2 23 1 1
2 3 19 1 1
3 4 19 0 0
>df_jun
id quantity attr_1 attr_3
0 5 8 1 0
1 6 13 0 1
2 7 20 1 1
3 8 25 1 1
Run Code Online (Sandbox Code Playgroud)
我尝试加入外连接:
mayjundf = pd.DataFrame.merge(df_may, df_jun, how="outer")
Run Code Online (Sandbox Code Playgroud)
但那会产生:
Left data columns not unique: Index([....
Run Code Online (Sandbox Code Playgroud)
我还指定了一个要加入的列(on ="id",例如),但是复制除"id"之外的所有列,如attr_1_x,attr_1_y,这是不理想的.我还将整个列列表(有很多)传递给"on":
mayjundf = pd.DataFrame.merge(df_may, df_jun, how="outer", on=list(df_may.columns.values))
Run Code Online (Sandbox Code Playgroud)
产量:
ValueError: Buffer has wrong number of dimensions …Run Code Online (Sandbox Code Playgroud) 我有这样的数据帧:
df = pd.DataFrame(pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12]],columns=["X_a","Y_b","X_b","Y_a"]))
X_a Y_b X_b Y_a
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
Run Code Online (Sandbox Code Playgroud)
现在我基本上通过基于_(下划线)拆分列并基于首字母大写字母对它们进行分组来创建具有多级列的数据帧.上述数据框的这种转换的一个例子可以是这样的:
X Y
a b a b
0 1 3 4 2
1 5 7 8 6
2 9 11 12 10
Run Code Online (Sandbox Code Playgroud)
我试着寻找一个解决方案,但我得到的最接近的是这个答案,这并不能完全解决我的问题.那么,除了提取柱子的蛮力方式,然后拆分它们并最终将它们排列在一起之外,是否有任何有效或更快的方法在Pandas中执行此操作?任何帮助,将不胜感激.