我有两个 Dataframe 。如果在df 1中,我有一个名字和出生日期与df 2中相同的人,我想从df 1中删除所有具有此名字和出生日期的行。如何使用Pandas?
df1=
| 出生日期|param1| param2| param10| param10 |
| --|--|--|--| ------------ |
| 日期1|什么东西|什么东西|什么东西| something |
| 日期2|什么东西|什么东西|什么东西| something |
| 日期3|什么东西|什么东西|什么东西| something |
| 日期4|什么东西|什么东西|什么东西| something |
df2=
| 出生日期|param11| param12| param20| param20 |
| --|--|--|--| ------------ |
| 日期1|什么东西|什么东西|什么东西| something |
| 日期2|什么东西|什么东西|什么东西| something |
5条答案
按热度按时间ql3eal8s1#
另一种可能的解决方案:
字符串
输出量:
型
pes8fvy92#
这里有一个办法:
字符串
产出:
型
c90pui9n3#
简短回答
字符串
其中
df1
仅包含在df2
中没有条目的行其他详细信息
您尝试执行的操作称为 * 反连接 *。在本例中,您试图从
df1
中删除df2
中有匹配的姓名和出生日期的行。df1
和df2
的“全名”和“出生日期”,然后仅保留df2
的“全名”和“出生日期”为空的行。indicator=True
参数向输出DataFrame添加一列_merge
,其中包含有关每行源的信息。根据数据源的不同,这些值可以是'left_only'、'right_only'或'both'。'_merge'值为'left_only'的行是那些在df1
中但不在df2
中的行,这正是您想要的。df1
将只包含不在df2
中的行。wvt8vs2t4#
如前所述,如果你的原始DF中有重复的内容,这也会删除它们--但由于你的问题中没有指出,我就不提了。
您可以只concat要检查是否存在重复的列,并将其放在同一组列上:
字符串
j9per5c45#
您可以使用指示符执行左连接(参见Pandas Merging 101),然后选择来自左侧的行。
个字符
.drop_duplicates()
在本例中不是必需的,但我添加了它以防万一。