如何在列中的匹配值上合并两个Pandas DataFrame

时间:2019-07-31 23:40:10

标签: pandas dataframe merge

我正在尝试合并两个DataFrame,以便它们仅基于“诊断”列中的匹配值进行合并。现在,我从第一个数据集中获取了重复项,我只需要添加与0或1相匹配的列即可。

我尝试了内连接,外连接,左连接和右连接。

diagnosis   radius_mean texture_mean    perimeter_mean  area_mean   smoothness_mean compactness_mean    concavity_mean  concave points_mean symmetry_mean   ... fractal_dimension_worst thickness   size    shape   adhesion    single  nuclei  chromatin   nucleoli    mitosis
0   1   17.99   10.38   122.80  1001.0  0.11840 0.27760 0.3001  0.1471  0.2419  ... 0.11890 8   10  10  8   7   10.0    9   7   1
1   1   17.99   10.38   122.80  1001.0  0.11840 0.27760 0.3001  0.1471  0.2419  ... 0.11890 5   3   3   3   2   3.0 4   4   1
2   1   17.99   10.38   122.80  1001.0  0.11840 0.27760 0.3001  0.1471  0.2419  ... 0.11890 8   7   5   10  7   9.0 5   5   4
3   1   17.99   10.38   122.80  1001.0  0.11840 0.27760 0.3001  0.1471  0.2419  ... 0.11890 7   4   6   4   6   1.0 4   3   1
4   1   17.99   10.38   122.80  1001.0  0.11840 0.27760 0.3001  0.1471  0.2419  ... 0.11890 10  7   7   6   4   10.0    4   1   2
5   1   17.99   10.38   122.80  1001.0  0.11840 0.27760 0.3001  0.1471  0.2419  ... 0.11890 7   3   2   10  5   10.0    5   4   4
6   1   17.99

1 个答案:

答案 0 :(得分:0)

我只是这样回答,因为较长的文本在注释中不太方便。

在两个数据帧都包含用merge指定的列的多个行的情况下,观察到的是on的典型行为。例如,如果您在m中有new_df_32条记录,在diagnosis=1中有n条记录,并且new_df_10条记录,则将在合并数据框中获得n*m条记录与diagnosis=1

如果不是这样,您想要实现什么,并且只想从new_df_10new_df_32添加字段,则有两种可能性:

  • 您使用的连接条件都不完整,并且您需要在on参数中包括其他列。
  • 或将new_df_32产生的聚合数据帧加入new_df_10。这意味着,您将new_df_32的所有行与一个数据框连接在一起,该数据框仅包含diagnosis=0的一行和diagnosis=1的一行。

第二种情况如下:

df10_aggregated= new_df_10.groupby(['diagnosis']).agg('first')
merged_df = pd.merge(new_df_32, df10_aggregated, left_on="diagnosis", right_index=True, how='left')

您只需要详细说明实际需要如何聚合数据帧(哪个聚合函数用于哪个列),并考虑到在first的情况下数据帧的排序起了作用,所以在在这种情况下,您可能还需要先对其进行排序(使用sort_values)。