이 두 데이터 프레임, cd2 및 cd3이 있습니다. 내가 CD3에서 CD2에 cat_gm 열을 추가 할 :하나의 데이터 프레임에서 다른 파이썬으로 열을 추가하려하지만 성공하지 못했습니다.
cd2['cat_gm']=pd.Series(cd3['cat_gm'])
cd2
cat rand freq _merge cat_gm
7 21 0.810730 2 left_only NaN
8 21 0.591324 3 left_only NaN
12 22 0.083941 3 left_only NaN
13 22 0.378123 4 left_only NaN
당신이 볼 수 있듯이, 내가 가진 모든 값 누락되었습니다
cd2
cat rand freq _merge
7 21 0.810730 2 left_only
8 21 0.591324 3 left_only
12 22 0.083941 3 left_only
13 22 0.378123 4 left_only
cd3
cat freq cat_gm _merge
14 11 2 11.0 right_only
15 12 3 12.0 right_only
16 12 4 12.0 right_only
17 12 5 12.0 right_only
을 위해 내 목표를 얻기 위해, 나는 다음과 같은 코드를 시도 . 나는이 대신 원하는 : cd2['cat_gm']=pd.Series(cd3['cat_gm'])
cd2
Out[13]:
cat rand freq _merge cat_gm
7 21 0.810730 2 left_only 11.0
8 21 0.591324 3 left_only 12.0
12 22 0.083941 3 left_only 12.0
13 22 0.378123 4 left_only 12.0
내가 잘못 어디 갔지?
다음 코드
내가 처음에 CD2 및 CD3을 생성하는 방법입니다import pandas as pd
import numpy as np
a=pd.DataFrame({'cat':[11,12,21,22],'freq':[2,3,4,5]})
b=pd.DataFrame({'cat':[11,12,21,22],'freq':[3,6,2,3]})
c=pd.Series.to_frame(np.repeat(a['cat'],a['freq']))
d=pd.Series.to_frame(np.repeat(b['cat'],b['freq']))
c['rand']=np.random.uniform(0,1,len(c.index))
c['freq']=c.groupby('cat').cumcount()
d['freq']=d.groupby('cat').cumcount()
c.sort_values(by=['rand'])
d['cat_gm']=d['cat']
cd=pd.merge(c,d,on=['cat','freq'],how='outer',indicator=True)
cd1=cd[cd._merge=='both']
cd2=cd[pd.isna(cd['cat_gm'])==True]
cd2=cd2.drop(['cat_gm'],axis=1)
cd3=cd[pd.isna(cd['rand'])==True]
cd3=cd3.drop(['rand'],axis=1)
팬더에서 열을 계열에 할당하면 해당 인덱스를 기반으로 할당됩니다. 색인이 일치하지 않기 때문에 NaN을 사용합니다. –
고마워요, 고쳐주세요. 'cat_gm = cd3 ['cat_gm ']. as_matrix() cd2 ['cat_gm '] = cat_gm' –