基于两个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
答案 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)
我想到的一个解决方案是merge
和drop
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]
尽管您将需要对其进行修改,以反映您要如何解析仅包含在一个列表中或列表大小不同的名称。