我在完成一项相对简单的任务时遇到问题...
我有两个数据框:
我从 csv 读取的 df_sample
+------+-----------+-------+-----------+
| key | Full Text | Date | Publisher |
+------+-----------+-------+-----------+
| abcd | foofoo | date1 | a |
| bcde | barbar | date2 | b |
| cdef | foobar | date3 | c |
+------+-----------+-------+-----------+
len(df_sample) = 20000
df_labels
我从 Excel 中读取
+------+----------+--------+--------+
| key | relevant | other | other2 |
+------+----------+--------+--------+
| abcd | yes | blabla | blabla |
| bcde | no | blabla | blabla |
| cdef | no | blabla | blabla |
| defg | yes | blabla | blabla |
+------+----------+--------+--------+
len(df_labels) = 219000
我想在键上连接两个表,为第一个数据帧中的每个键分配相关
值。所需的输出将如下所示:
+------+-----------+-------+-----------+----------+
| key | Full Text | Date | Publisher | relevant |
+------+-----------+-------+-----------+----------+
| abcd | foofoo | date1 | a | yes |
| bcde | barbar | date2 | b | no |
| cdef | foobar | date3 | c | no |
+------+-----------+-------+-----------+----------+
我似乎实现了这一点,但为什么以下给出了 27377 个结果而不是 20000 个结果(如原始左表中所示):
df = pd.merge(left=df_sample, right=df_labels, on="key")
最佳答案
您看到了额外的行,因为键在两个 df 中都不是唯一的,在您的情况下是第二个 df。您需要决定是否需要重复的行(这是当前的行为),还是要删除第二个 df 中的重复行:
df_labels = df_labels.drop_duplicates(subset='key')
默认情况下,这将仅保留第一个重复项,如果您想要其他行为,例如保留最后一个,则可以传递:keep='last'
请参阅 docs
关于python - 合并返回奇数长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43182318/