我有兩個資料框架。 df1:
| from id | from group | to id | to group |
| 1 | A | 3 | B !
| 4 | B | 4 | X !
| 5 | F | 5 | J !
2 | B | 3 | A !
df2:
| From | To | |
| ????
| F | J |
我想過濾掉df2中的值,如果在df1的'from group'和'to group'列中存在的話
。預期的輸出:
| from id | from group | to id | to group !
| 4 | B | 4 | X !
2 | B | 3 | A !
我正在尋找一個靈活的解決方案。一個在df2列的值發生變化時也不會改變的解決方案。
uj5u.com熱心網友回復:
你可以使用.merge與indicator=True,然后過濾df1:
x = df1[
df1.merge(
df2,
left_on=["from group"/span>, "to group"/span>]。
right_on=["From", "To"] 。
indicator=True,
how="left"。
)._merge.eq("left_only")
]
print(x)
列印:
from id from group to id to group
1 4 B 4 X
3 2 B 3 A
uj5u.com熱心網友回復:
df_1 = pd. DataFrame(data={'from id': [1,4,5,2] 。
'from group': ['A', 'B', 'F', 'B'] 。
'to id': [3,4,5,3] 。
'to group': ['B'/span>, 'X', 'J', 'A']})
cols = list(df_1)
df_2 = pd.DataFrame(data={'From': ['A'/span>, 'F'/span>], 'To'/span>: ['B'/span>, 'J'/span>]})
print(df_1)
print('-----')
print(df_2)
df_1 = df_1. merge(df_2, how='left'/span>, left_on=['from group'/span>, 'to group'], right_on=['From', 'To'] )
df_1 = df_1[df_1['From'].isnull()] [cols]
print(df_1)
uj5u.com熱心網友回復:
快速編輯我對你這個問題的上一次迭代提供的答案。
l1 = df2.values.tolist()
l2 = list(itertools.chain.from_iterable([itertools.permutations(i, r=2) fori in l1])
df[[j not in l2 for j in list(zip(df['from group']。df['to group'])]。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/309486.html
標籤:
