私はあなたがmerge
が必要だと思うが、最初の列ColumnA
と最後ColumnB
の名前を変更します。
print (pd.merge(df1,df2.rename(columns={'ColumnA':'Column1'}))
.rename(columns={'ColumnB': 'Column3'}))
Column1 Column2 Column3
0 abc a ddd
1 pqr b ccc
2 stu c aaa
3 mno d bbb
4 xyz e eee
パラメータleft_on
とright_on
のもう一つの解決策が、必要であるdrop
列ColumnA
:
print (pd.merge(df1,df2, left_on='Column1', right_on='ColumnA')
.drop('ColumnA', axis=1)
.rename(columns={'ColumnB': 'Column3'}))
Column1 Column2 Column3
0 abc a ddd
1 pqr b ccc
2 stu c aaa
3 mno d bbb
4 xyz e eee
コメントによる編集:
参加した値が重複している場合は、行が掛け合わされています。
import pandas as pd
data = [['abc','a'], ['pqr','b'], ['pqr','b'], ['pqr','b']]
df1 = pd.DataFrame(data, columns=['Column1','Column2'])
df2 = pd.DataFrame({'ColumnA': {0: 'stu', 1: 'pqr', 2: 'pqr'},
'ColumnB': {0: 'aaa', 1: 'ccc', 2: 'ccc'}})
print (df1)
Column1 Column2
0 abc a
1 pqr b
2 pqr b
3 pqr b
print (df2)
ColumnA ColumnB
0 stu aaa
1 pqr ccc
2 pqr ccc
print (pd.merge(df1,df2.rename(columns={'ColumnA':'Column1'}))
.rename(columns={'ColumnB': 'Column3'}))
Column1 Column2 Column3
0 pqr b ccc
1 pqr b ccc
2 pqr b ccc
3 pqr b ccc
4 pqr b ccc
5 pqr b ccc
次に使用可能性drop_duplicates
は次のとおりです。
print (df1)
Column1 Column2
0 abc a
1 pqr b
2 pqr b
3 pqr b
df1 = df1.drop_duplicates()
print (df1)
Column1 Column2
0 abc a
1 pqr b
print (df2)
ColumnA ColumnB
0 stu aaa
1 pqr ccc
2 pqr ccc
df2 = df2.drop_duplicates()
print (df2)
ColumnA ColumnB
0 stu aaa
1 pqr ccc
print (pd.merge(df1,df2.rename(columns={'ColumnA':'Column1'}))
.rename(columns={'ColumnB': 'Column3'}))
Column1 Column2 Column3
0 pqr b ccc
はEDIT1:
DataFrames
は、複数の列を持っている場合は、結合を指定重要ですパラメータごとの列on
:
print (pd.merge(df1,df2.rename(columns={'ColumnA':'Column1'}), on='Column1')
.rename(columns={'ColumnB': 'Column3'}))
EDIT2:
選択した列にNaN
で行を削除が必要な場合dropna
を使用します。
df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,np.nan],
'C':[7,8,np.nan],
'D':[np.nan,3,5],
'E':[5,3,6],
'F':[7,4,3]})
print (df)
A B C D E F
0 1 4.0 7.0 NaN 5 7
1 2 5.0 8.0 3.0 3 4
2 3 NaN NaN 5.0 6 3
print (df.dropna(subset=['C','B']))
A B C D E F
0 1 4.0 7.0 NaN 5 7
1 2 5.0 8.0 3.0 3 4
は申し訳ありませんが、あなたはちょうど同じ結果を達成するために、 '' df1.merge(DF2)で行うことはできませんか? – EdChum