2014-02-05 74 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 

我希望在DF2映射DF2 [「A」]到DF1並找到DF1最小的數字,這比在DF2 [「B」]的數量更大,以創建第三列。例如,對於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

相關問題