当前位置: 首页 > 面试题库 >

pandas groupby,您将获得一列的最大值和另一列的最小值

林俭
2023-03-14
问题内容

我有一个数据框,如下所示:

user    num1    num2
a       1       1
a       2       2
a       3       3
b       4       4
b       5       5

我想要一个数据框,该数据框具有每个用户num1的最小值和每个用户num2的最大值。

输出应类似于:

user    num1    num2
a       1       3
b       4       5

我知道,如果我想要两栏的最大值,我可以做:

a.groupby('user')['num1', 'num2'].max()

是否有一些等效方法而不必执行以下操作:

series_1 = a.groupby('user')['num1'].min() 
series_2 = a.groupby('user')['num2'].max()

# converting from series to df so I can do a join on user
df_1 = pd.DataFrame(np.array([series_1]).transpose(), index=series_1.index, columns=['num1']) 
df_2 = pd.DataFrame(np.array([series_2]).transpose(), index=series_2.index, columns=['num2'])

df_1.join(df_2)

问题答案:

使用groupby+
aggby
dict,因此必须按subset或排序列reindex_axis。最后添加reset_index为必要时转换indexcolumn

df = a.groupby('user').agg({'num1':'min', 'num2':'max'})[['num1','num2']].reset_index()
print (df)
  user  num1  num2
0    a     1     3
1    b     4     5

等同于:

df = a.groupby('user').agg({'num1':'min', 'num2':'max'})
                      .reindex_axis(['num1','num2'], axis=1)
                      .reset_index()
print (df)
  user  num1  num2
0    a     1     3
1    b     4     5


 类似资料:
  • 问题内容: 我有下表。 我想选择的每一个具有最低。 当我得到所需的内容后,一旦添加了列,就需要将其也添加到GROUP BY子句,当我需要的只是每种类型的最低要求时,它返回所有行。 问题答案: 在标准SQL中,这可以使用窗口函数来完成 但是,Postgres具有运算符,该运算符通常比带有窗口函数的相应解决方案要快:

  • 问题内容: 这应该是一个简单的问题,但我无法使其起作用:( 如何按另一列分组选择具有最大列值的行? 例如, 我有以下表格定义: 现在的问题是,我想先按结果分组,然后再从每组中选择一行,具体取决于哪一组具有最高的。 我试过了 但是,与其以正确的方式回报我,不如以同一个小组中最早的回报我。 有任何想法吗? 问题答案: 我本人为此进行了很多次努力,解决方案是以不同的方式考虑您的查询。 我希望其中具有该D

  • 我有这样一个数据帧: 现在我需要按ID分组,对于col1和col4列,找到每个ID的和,并将其放入父列附近的一个新列中(例如:col3(sum)),但是对于col2和col3,找到max value。期望输出: 计算这个最简单最快的方法是什么?

  • 问题内容: 有以下选择: 我想获得具有最小值N_UM的行(仅一个),在这种情况下,其ID = 10(10 0)的行。 问题答案: 试试这个 -

  • 问题内容: 如何作为熊猫数据框方程的一部分引用两个数据框的最小值?我尝试使用无法正常工作的python函数。很抱歉,如果在某处有充分的文档证明,但无法找到有效的解决方案来解决此问题。我正在寻找与此类似的东西: 我也尝试使用pandas函数,该函数也不起作用。 这个错误让我感到困惑。数据列只是数字和名称,我不确定索引在哪里起作用。 问题答案: 如果要获取两列或更多列的行,请使用并指定。

  • 问题内容: 我有一张价格变动表,我需要获取初始价格和最新价格。换句话说,我想在每种产品的一行中显示min(StartDate)和max(StartDate)的价格值。 表的结构很简单: 所需的结果是 问题答案: SQLFiddle演示