我有兩個數據集如下外python中加入熊貓
A B
IDs IDs
1 1
2 2
3 5
4 7
如何在熊貓,numpy的,我們可以申請一個連接,可以給我從B,這是不存在的 東西全部數據像下面
B
Ids
5
7
我知道它可以與循環來實現,但我不想,因爲我真正的數據是數以百萬計,而且我真的不知道如何在這裏使用熊貓numpy的,像以下
pd.merge(A, B, on='ids', how='right')
感謝
我有兩個數據集如下外python中加入熊貓
A B
IDs IDs
1 1
2 2
3 5
4 7
如何在熊貓,numpy的,我們可以申請一個連接,可以給我從B,這是不存在的 東西全部數據像下面
B
Ids
5
7
我知道它可以與循環來實現,但我不想,因爲我真正的數據是數以百萬計,而且我真的不知道如何在這裏使用熊貓numpy的,像以下
pd.merge(A, B, on='ids', how='right')
感謝
可以使用merge
與參數indicator
然後boolean indexing
。最後你可以drop
列_merge
:
A = pd.DataFrame({'IDs':[1,2,3,4],
'B':[4,5,6,7],
'C':[1,8,9,4]})
print (A)
B C IDs
0 4 1 1
1 5 8 2
2 6 9 3
3 7 4 4
B = pd.DataFrame({'IDs':[1,2,5,7],
'A':[1,8,3,7],
'D':[1,8,9,4]})
print (B)
A D IDs
0 1 1 1
1 8 8 2
2 3 9 5
3 7 4 7
df = (pd.merge(A, B, on='IDs', how='outer', indicator=True))
df = df[df._merge == 'right_only']
df = df.drop('_merge', axis=1)
print (df)
B C IDs A D
4 NaN NaN 5.0 3.0 9.0
5 NaN NaN 7.0 7.0 4.0
您可以使用NumPy's setdiff1d
,像這樣 -
np.setdiff1d(B['IDs'],A['IDs'])
此外,np.in1d
可用於同樣的效果,像這樣 -
B[~np.in1d(B['IDs'],A['IDs'])]
請注意,np.setdiff1d
會給我們一個排序的NumPy數組作爲輸出。
採樣運行 -
>>> A = pd.DataFrame([1,2,3,4],columns=['IDs'])
>>> B = pd.DataFrame([1,7,5,2],columns=['IDs'])
>>> np.setdiff1d(B['IDs'],A['IDs'])
array([5, 7])
>>> B[~np.in1d(B['IDs'],A['IDs'])]
IDs
1 7
2 5
非常感謝!但儘管我有幾次嘗試:「我收到錯誤,列表索引必須是整數而不是列表」 –
@manusharma那麼,除了'IDs'這一列中的整數之外,還有其他任何東西,比如可能是字符串還是整數? – Divakar
我有兩個大型的List/Dataframe,其中一些是long,Integers,我試圖用Map(int,dataset)把所有的都轉換成一個,還是一樣的錯誤List Indices必須是整數而不是列表 –
您可以在數據序列轉換成集,並採取區別:
import pandas as pd
df=pd.DataFrame({'A' : [1,2,3,4], 'B' : [1,2,5,7]})
A=set(df['A'])
B=set(df['B'])
C=pd.DataFrame({'C' : list(B-A)}) # Take difference and convert back to DataFrame
變量 「C」 則得到
C
0 5
1 7
你可以只需使用熊貓'.isin()
方法:
df = pd.DataFrame({'A' : [1,2,3,4], 'B' : [1,2,5,7]})
df[~df['B'].isin(df['A'])]
如果這些單獨DataFrames:
a = pd.DataFrame({'IDs' : [1,2,3,4]})
b = pd.DataFrame({'IDs' : [1,2,5,7]})
b[~b['IDs'].isin(a['IDs'])]
輸出:
IDs
2 5
3 7
嘗試,而不是'right'你可以指定'outer'。 – shivsn
預期產量是多少?列名似乎是A和B,而不是ID ......這是誤導。 –