Pandas - 如何根据另一个子集从一个子集中删除重复项
Pandas - How to remove duplicates from a subset based on another subset
我有 2 个具有相似列的子集,但它们共有的一列是列 A
。
我有左dfL
和右dfR
.
我想确保在 L
中看到的列 A
的所有重复项都在 df R
中从 L
- 整个列中删除。
如何做到这一点?
import pandas as pd
L_df = pd.DataFrame({'A': ['bob/is/cool', 'alice/is/cool', 'jim/is/cool'],
'view': ['A', 'B', 'B']})
R_df = pd.DataFrame({'A': ['ralf/is/cool', 'i/am/cool', 'alice/is/cool'],
'view': ['A', 'B', 'C']})
我想得到这个结果,结果是删除列 A
的重复项,并从 L
而不是 R
.
中获取重复值
所以我们采用 alice/is/cool
的 view
值为 C
而不是 B
如果这有意义的话:)
输出将是
out = pd.DataFrame({'A': ['ralf/is/cool', 'i/am/cool', 'alice/is/cool', 'bob/is/cool', 'jim/is/cool'],
'view': ['A', 'B', 'C', 'A', 'B']})
这就是你想要的吗?
>>> pd.concat([R_df, L_df]).drop_duplicates(keep='first', subset='A')
A view
0 ralf/is/cool A
1 i/am/cool B
2 alice/is/cool C
0 bob/is/cool A
2 jim/is/cool B
注意:这是根据您的描述胡乱猜测的结果。
它将不加区别地删除任何重复项(在 R 内、L 内或两者的串联中)并仅保留第一个。
您可能希望根据重复项的位置和数量对案例进行更微妙的处理,但如果没有一组更可靠的示例,则很难判断。
我有 2 个具有相似列的子集,但它们共有的一列是列 A
。
我有左dfL
和右dfR
.
我想确保在 L
中看到的列 A
的所有重复项都在 df R
中从 L
- 整个列中删除。
如何做到这一点?
import pandas as pd
L_df = pd.DataFrame({'A': ['bob/is/cool', 'alice/is/cool', 'jim/is/cool'],
'view': ['A', 'B', 'B']})
R_df = pd.DataFrame({'A': ['ralf/is/cool', 'i/am/cool', 'alice/is/cool'],
'view': ['A', 'B', 'C']})
我想得到这个结果,结果是删除列 A
的重复项,并从 L
而不是 R
.
所以我们采用 alice/is/cool
的 view
值为 C
而不是 B
如果这有意义的话:)
输出将是
out = pd.DataFrame({'A': ['ralf/is/cool', 'i/am/cool', 'alice/is/cool', 'bob/is/cool', 'jim/is/cool'],
'view': ['A', 'B', 'C', 'A', 'B']})
这就是你想要的吗?
>>> pd.concat([R_df, L_df]).drop_duplicates(keep='first', subset='A')
A view
0 ralf/is/cool A
1 i/am/cool B
2 alice/is/cool C
0 bob/is/cool A
2 jim/is/cool B
注意:这是根据您的描述胡乱猜测的结果。
它将不加区别地删除任何重复项(在 R 内、L 内或两者的串联中)并仅保留第一个。
您可能希望根据重复项的位置和数量对案例进行更微妙的处理,但如果没有一组更可靠的示例,则很难判断。