2017-08-30 12 views
1

ここでPythonを学んでください。私は2つの部分からなる問題を抱えています。最初の部分に対する解決策を作成しましたが、目標を達成するためにはるかに無限の方法が必要です。 2番目の部分は、どのように進めるか分かりません。python pandas:データフレームの列の値が別のデータフレームの列にあるかどうかを確認し、それを数えてリストアップしてください。

私は2つの別々のデータフレームにユニークなIDの列を持っています。私は、df_1のuid列のdf_2 uid列のuidが何回発生したのかを数え、両方の場合はそのuidをリストに追加します。次のコード例は私のために働いていますが、私はどこかに問題があると心配していますし、もっと良い方法が必要です。第2の部分はDF1の値のためのDFで列を作成し、DF1からの値を加算さ

df 
    uid value 
0 uid1  1 
1 uid2  2 
2 uid3  3 
3 uid4  4 


df1 
    uid value1 
0 uid4  
1 uid2  5 
2 uid5  6 


count = 2 
['uid4', 'uid2'] 

:出力

data = {'uid':['uid1', 'uid2', 'uid3', 'uid4'], 'value': [1, 2, 3, 4]} 
df = pd.DataFrame(data) 

data1 = {'uid':['uid4', 'uid2', 'uid5'], 'value1': ["", 5, 6]} 
df1 = pd.DataFrame(data1) 

count_val_in_both_df = 0 
list_val_in_both_df = [] 
for x in range(len(df1.iloc[:, 0])) : 
    if df1.iloc[x, 0] in df.iloc[:, 0].values : 
     count_val_in_both_df += 1 
     list_val_in_both_df.append(df1.iloc[x, 0])   
print('count = ' + str(count_val_in_both_df)) 
print(list_val_in_both_df) 

。私はそれのこの部分にかなり失われていますが、このような結果が欲しい:

{ uid value value1 
0 uid1  1  
1 uid2  2  5 
2 uid3  3  
3 uid4  4  } 

答えて

2

あなたは質問の最初の部分について

df.merge(df1, on = 'uid', how = 'left').fillna('') 

    uid value value1 
0 uid1 1 
1 uid2 2 5 
2 uid3 3 
3 uid4 4 

をマージ使用することができ、あなたが交差点

を使用することができます
list_val_in_both_df = list(set(df.uid).intersection(set(df1.uid))) 

あなたが義和より

['uid2', 'uid4'] 
+0

そんなに良くなります私は試していた。ありがとう、トン – fmc100

+0

@ fmc100、ありがとう。あなたの質問が解決したら、答えを受け入れてください。 – Vaishali

関連する問題