2017-03-21 133 views
1

我有兩個csv文件,都包含在day1和day2上發佈的推文。我想比較推文的作者來發現新用戶。將兩個熊貓數據框中的列進行比較並分出差異

day1.csv看起來是這樣的:

authorID 
451223 
120346 
122355 
787456 

day2.csv看起來是這樣的:

authorID 
451223 
025660 
122355 
022000 

使用day1.csv爲支點...我想比較的作者的ID。 。任何新的作者(即day2.csv中的作者,但不在day1.csv中),我輸出作者的ID。請問我怎樣才能做到這在Python 3.XX

回答

0

你可以那樣做:

import pandas as pd 
df1=pd.DataFrame({'authorID':['12','34','56']}) 
df2=pd.DataFrame({'authorID':['12','56','78','97']}) 
original_users=set(df1[['authorID']].values.reshape(-1)) 
for i in df2[['authorID']].values.reshape(-1): 
    if i not in original_users: 
     print(i) 

然後df1

u 
0 12 
1 34 
2 56 

df2

u 
0 12 
1 56 
2 78 
3 97 

的輸出爲

78 
97 

請注意,df1[['authorID']].values.reshape(-1)使您能夠將列轉換爲您可以迭代的列表。對於這個特定的例子, df1[['authorID']].values.reshape(-1)array(['12', '34', '56'], dtype=object)。將這個數組轉換爲set是爲了提高複雜性。 (?f.readlines()

1

如果您有加載iterables兩個CSV文件,那麼你可以簡單地使用設定的差與不在day1.csv day2.csv的元素返回一組新:

>>> day1 = ['authorID',451223,120346,122355,787456] 
>>> day2 = ['authorID',451223,025660,122355,022000] 
>>> set(day2) - set(day1) 
set([11184, 9216]) 

>>> set(day2).difference(day1) 
set([11184, 9216]) 
0

只是另一種方式來比較兩組authorID S之間的區別:

>>> old = {'451223', '120346', '122355', '787456'} 
>>> new = {'451223', '025660', '122355', '022000'} 
>>> {x for x in new if x not in old} 
{'025660', '022000'} 
0

假設day1day2是dataframes ...使用mergeindicator參數設置爲True

day1.merge(day2, 'outer', indicator=True).query('_merge != "both"') 

    authorID  _merge 
1 120346 left_only 
3 787456 left_only 
4  25660 right_only 
5  22000 right_only 
相關問題