如何比较两个数据框并将计数的唯一值放在第一个数据框的列中?

数据挖掘 Python 熊猫
2022-03-09 01:55:37

我有两个不同的(地理)数据框,一个有 690 行,另一个有 1826 行。第一个是基于第二个数据帧的接近度(空间接近度)的分组。因此,它们与 FID_1 和 NEAR_FID 列绑定。第一个数据帧中的每个 FID_1 对应于第二个数据帧中的至少 2 个 NEAR_FID。我的挑战是计算第二个数据帧中 NEAR_FID 的数量,并将其作为一行放在第一个数据帧中。我正在使用 python 3.5+。感谢您的任何建议。

在此处输入图像描述

1个回答

merge使用pandas中的功能可以实现您想要的。这是代码:

df1 = pd.DataFrame({'FID_1':[1,2,3]})
df2 = pd.DataFrame({'NEAR_FID':[1,1,1,1,2,2,3,3]})

df_freq = df2.NEAR_FID.value_counts().reset_index()
df = pd.merge(df_freq, df1, how='inner', left_on=['index'], right_on=['FID_1'])
df
       index  NEAR_FID  FID_1
0      1         4      1
1      3         2      3
2      2         2      2

您可以删除任何列索引或 FID_1 以获得所需的输出。

有关合并功能的更多信息,请查看官方文档 ,并在此处对其工作外观进行很好的解释

编辑 1:合并函数只接受数据框而不接受系列。因此,如果您的数据是系列格式,请先将其转换为数据帧。您可以通过以下方式检查数据类型:

print(type(df2))

那应该输出pandas.core.series.Series

使用它将其更改为数据框:

df = df.to_frame().reset_index()