pandas比较并从另一个数据帧中选择最小的数字

时间:2014-02-05 16:37:42

标签: python pandas

我有两个数据帧。

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中创建第3列,将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']搜索相应的行。感谢。

1 个答案:

答案 0 :(得分: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]

pandas docs

中有一些示例用法