2014-02-05 3 views
1

두 개의 데이터 프레임이 있습니다.팬더는 다른 데이터 프레임에서 가장 작은 숫자를 비교하고 선택합니다.

df1 
Out[162]: 
    a b c 
0 0 0 0 
1 1 1 1 
2 2 2 2 
3 3 3 3 
4 4 4 4 
5 5 5 5 
6 6 6 6 
7 7 7 7 
8 8 8 8 
9 9 9 9 
10 10 10 10 
11 11 11 11 

df2 
Out[194]: 
    A B 
0 a 3 
1 b 4 
2 c 5 

나는 DF1 및 DF2 [ 'B']의 수보다 큰의 DF1에서 가장 작은 수를 찾을 수 DF2 [ 'A'를] 매핑 DF2의 3 열을 생성하고 싶습니다. 예를 들어, df2 [ 'C'] .ix [0]의 경우 df1 [ 'a']로 이동하여 df2 [ 'B']보다 큰 최소 수를 검색해야합니다. ix [0] 4.

나는 df2['C'] = df2['A'].map(df1[df1 > df2['B']].min())과 같은 것을 가지고 있었다. 그러나 이것은 df2 [ 'B'] 검색에 해당 행을 검색하지 않기 때문에 작동하지 않습니다. 감사. 행 방향 방법에 대한

답변

2

사용 apply는 :

In [54]: 
# create our data 
import pandas as pd 

df1 = pd.DataFrame({'a':list(range(12)), 'b':list(range(12)), 'c':list(range(12))}) 
df1 
Out[54]: 
    a b c 
0 0 0 0 
1 1 1 1 
2 2 2 2 
3 3 3 3 
4 4 4 4 
5 5 5 5 
6 6 6 6 
7 7 7 7 
8 8 8 8 
9 9 9 9 
10 10 10 10 
11 11 11 11 

[12 rows x 3 columns] 

In [68]: 
# create our 2nd dataframe, note I have deliberately used alternate values for column 'B' 
df2 = pd.DataFrame({'A':list('abc'), 'B':[3,5,7]}) 
df2 
Out[68]: 
    A B 
0 a 3 
1 b 5 
2 c 7 

[3 rows x 2 columns] 
In [69]: 

# apply row-wise function, must use axis=1 for row-wise 
df2['C'] = df2.apply(lambda row: df1[row['A']].ix[df1[row.A] > row.B].min(), axis=1) 
df2 
Out[69]: 
    A B C 
0 a 3 4 
1 b 5 6 
2 c 7 8 

[3 rows x 3 columns] 

팬더 docs

+0

이 아름다운 약간의 사용 예입니다. 빠른 답변 주셔서 감사합니다. – KLI

관련 문제