데이터 프레임이 2 개 있습니다. 하나의 데이터 프레임에는 'Sample_Artists', 'Sample_Songs', 'Sampled_Songs'및 'Sampled_Artists'의 4 개의 열이 있습니다. 다른 데이터 프레임에는 'Artists'와 'Songs'라는 두 개의 열이 있습니다. 두 번째 데이터 프레임에는 첫 번째 데이터 프레임과 동일한 아티스트 및 곡 이름이 포함되어 있지만 첫 번째 데이터 프레임에는 관계형 데이터가 포함되어 있습니다 (즉, 첫 번째 데이터 프레임에 포함 된 모든 아티스트 및 노래 쌍이 두 번째 데이터 프레임에서 고유 한 행입니다. 데이터 프레임).다른 데이터 프레임의 인덱스를 기반으로 한 데이터 프레임에 "ID"열을 어떻게 만들 수 있습니까?
기본적으로 내 두 번째 데이터 프레임의 인덱스를 ID로 사용하는 첫 번째 데이터 프레임에 두 개의 열을 추가하여 각 고유 한 아티스트 및 노래 쌍에 대해 두 번째 데이터에서 일치하는 인덱스를 갖습니다. 틀. 여기
내가 뭘 원하는지의 간단한 예제 : 다음 나는 두 개의 열을 추가 할 이제 다른 dataframedf1 =
index Artist Song
0 A+ foo
1 A+ foobar
2 B+ bar
3 B+ 5
4 C+ barfoo
이
내가
df =
Sample_Artist Sample_Song Sampled_Artist Sampled_Song
A+ foo B+ bar
A+ foobar C+ barfoo
B+ 5 A+ foobar
이 말 내 첫 번째 데이터 프레임 :
df =
Sample_Artist Sample_Song Sampled_Artist Sampled_Song Sample_ID Sampled_ID
A+ foo B+ bar 0 2
A+ foobar C+ barfoo 1 4
B+ 5 A+ foobar 3 0
이것은 매우 간단하지만, 어디서부터 시작해야하는지 알 수 없습니다. groupby를 사용하여 이와 비슷한 작업을했지만 내 인덱스를 두 번째 데이터 프레임 (이 예제의 df1)과 일치시키지 못했습니다.
편집 :
import io
import pandas as pd
df = pd.read_table(io.BytesIO('''\
Sample_Artist Sample_Song Sampled_Artist Sampled_Song
A+ foo B+ bar
A+ foobar C+ barfoo
B+ 5 A+ foobar
A+ foo B+ 5'''), sep='\s+')
df1 = pd.read_table(io.BytesIO('''\
Artist Song
A+ foo
A+ foobar
B+ bar
B+ 5
C+ barfoo'''), sep='\s+')
df.index.names = ['Sample_ID']
df1.index.names = ['Sampled_ID']
df = df.reset_index()
df1 = df1.reset_index()
result = pd.merge(df, df1, left_on=['Sampled_Artist', 'Sampled_Song'],
right_on=['Artist', 'Song'],
how='left')
result = result[['Sample_Artist',
'Sample_Song',
'Sampled_Artist',
'Sampled_Song',
'Sample_ID',
'Sampled_ID']]
print(result)
Sample_Artist Sample_Song Sampled_Artist Sampled_Song Sample_ID Sampled_ID
0 A+ foo B+ bar 0 2
1 A+ foobar C+ barfoo 1 4
2 B+ 5 A+ foobar 2 1
3 A+ foo B+ 5 3 3
그래서 코드가 나에게 3와 동일한 Sample_ID과 Sampled_ID 제공
(가 제공해야 인덱스 3, Sample_ID = 0 Sample_ID = 3). 전체 Sample_ID 열이 꺼져 있고 (Sampled_ID가 좋음) 정확한 이유를 파악할 수 없습니다.나는보고 싶습니다
Sample_Artist Sample_Song Sampled_Artist Sampled_Song Sample_ID Sampled_ID
0 A+ foo B+ bar 0 2
1 A+ foobar C+ barfoo 1 4
2 B+ 5 A+ foobar 3 1
3 A+ foo B+ 5 0 3
감사합니다! 이것은 오른쪽 (sampled_id의)에서 작동하는 것처럼 보이지만 Sample_Artists에 중복이 있으면 각각의 고유 한 ID가 할당됩니다. 왜 이것이 표시되는지는 샘플링 된 버전 대신 left_on을 설정했기 때문입니다. 샘플 버전 ...하지만 둘 다 동일한 ID를 사용하고 싶습니다 ... – mikedf
문제를 설명하는 데이터와 원하는 결과로 게시물을 업데이트 할 수 있습니까? – unutbu
예. 기본적으로 sample_id 열은 인덱스 데이터를 전혀 사용하지 않습니다. 내 게시물을 업데이트하여 문제를 표시했습니다. – mikedf