根据两个数据框之间的列值选择较高的值

时间:2019-07-17 17:57:34

标签: python pandas

基于两个df选择值的问题。

>>> df[['age','name']]
    age   name
0    44   Anna
1    22    Bob
2    33  Cindy
3    44  Danis
4    55  Cindy
5    66  Danis
6    11   Anna
7    43    Bob
8    12  Cindy
9    19  Danis
10   11   Anna
11   32   Anna
12   55   Anna
13   33   Anna
14   32   Anna

>>> df2[['age','name']]
   age   name
5   66  Danis
4   55  Cindy
0   44   Anna
7   43    Bob

预期结果是基于列“名称”,值“ age”高于df ['age”]的所有行。

预期结果

    age   name
12   55   Anna

4 个答案:

答案 0 :(得分:1)

对于每个注释,请使用合并和过滤数据框:

df.merge(df2, on='name', suffixes={'','_y'}).query('age > age_y')[['name','age']]

输出:

   name  age
4  Anna   55

IIUC,您可以使用它来查找所有名称的最大年龄:

pd.concat([df,df2]).groupby('name')['age'].max()

输出:

name
Anna     55
Bob      43
Cindy    55
Danis    66
Name: age, dtype: int64

答案 1 :(得分:0)

尝试一下:

index = df[df['age'] > age].index
df.loc[index]

答案 2 :(得分:0)

我想到的一个解决方案是mergedrop

df.merge(df2, on='name', suffixes=('', '_y')).query('age.gt(age_y)', engine='python')[['age','name']]

Out[175]:
   age  name
4   55  Anna

答案 3 :(得分:0)

在某些情况下,您没有提到要解决的方式,但是通常您想要做的是迭代df并比较年龄并使用较大的年龄。您可以通过以下方式进行操作:

df3 = pd.DataFrame(columns = ['age', 'name'])
for x in len(df):
    if df['age'][x] > df2['age'][x]:
        df3['age'][x] = df['age'][x]
        df3['name'][x] = df['name'][x] 
    else:
        df3['age'][x] = df2['age'][x]
        df3['name'][x] = df2['name'][x]  

尽管您将需要对其进行修改,以反映您要如何解析仅包含在一个列表中或列表大小不同的名称。