通过匹配两个数据框索引来创建新的数据框

时间:2020-06-09 18:21:46

标签: python pandas dataframe

我正在寻找从两个单独的数据帧中的数据创建一个新的数据帧-有效地匹配每个单元格的索引并输入到两列数据帧中。我的真实数据集具有完全相同的行数和列数,即FWIW。下面的示例:

 DF1:
 Col1  Col2  Col3
  1     2     3
  3     8     7

 DF2:
 Col1  Col2  Col3
  A     B     E
  R     S     W

所需数据框:

 Col1  Col2
   1    A
   2    B
   3    E
   3    R
   8    S
   7    W

谢谢您的帮助!

5 个答案:

答案 0 :(得分:2)

这是您的代码

df3 = pd.Series(df1.values.ravel('F'))
df4 = pd.Series(df2.values.ravel('F'))
df = pd.concat([df3, df4], axis=1)

答案 1 :(得分:2)

使用DataFrame.to_numpy.flatten

df = pd.DataFrame(
    {'Col1': df1.to_numpy().flatten(), 'Col2': df2.to_numpy().flatten()})

# print(df)

   Col1 Col2
0     1    A
1     2    B
2     3    E
3     3    R
4     8    S
5     7    W

答案 2 :(得分:1)

您可以轻松地做到这一点:

list1 = df1.values.tolist()
list1 = [item for sublist in list1 for item in sublist]

list2 = df2.values.tolist()
list2 = [item for sublist in list2 for item in sublist]

 df = {
          'Col1': list1,
          'Col2': list2
      }

df = DataFrame(df)
print(df)

希望这会有所帮助:)

答案 3 :(得分:1)

pd.concat(map(lambda x: x.unstack().sort_index(level=-1), (df1, df2)), axis=1).reset_index(drop=True).rename(columns=['Col1', 'Col2'].__getitem__)

结果:

   Col1 Col2
0     1    A
1     2    B
2     3    E
3     3    R
4     8    S
5     7    W

答案 4 :(得分:1)

另一种方式(替代):

pd.concat((df1.stack(),df2.stack()),axis=1).add_prefix('Col').reset_index(drop=True)

或:

d = {'Col1':df1,'Col2':df2}
pd.concat((v.stack() for k,v in d.items()),axis=1,keys=d.keys()).reset_index(drop=True)
#or pd.concat((d.values()),keys=d.keys()).stack().unstack(0).reset_index(drop=True)

  Col1 Col2
0     1    A
1     2    B
2     3    E
3     3    R
4     8    S
5     7    W