我有一个数据框,如下所示:
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
+
agg
by
dict
,因此必须按subset
或排序列reindex_axis
。最后添加reset_index
为必要时转换index
为column
。
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演示