熊猫分组;if 条件:sum else: 给定列的最大值基于另一列

乔伊科

df我在group

df = pd.DataFrame(np.random.rand(4,4), columns=list('abcd'))
df['group'] = [0, 0, 1, 1]

然后我想折叠 df 以便在 B 的总和大于 1 时对 A 求和,如果 B 的总和小于或等于 1,我想要 A 的最大值。

然后我想要 B 的 min() 和对其余列的其他各种操作。

耶斯列

为了获得更好的性能,请使用where

np.random.seed(15)
N = 1000
df = pd.DataFrame(np.random.rand(N,10), columns=list('abcdefghij'))
df['group'] = np.random.randint(100, size=N)

df_grouped = df.groupby('group')
s1 = df_grouped.apply(lambda grp: grp['a'].sum() if grp['b'].sum() > 1 else grp['a'].max())
print (s1)

df_grouped = df.groupby('group')
s2 = df_grouped['a'].sum().where(df_grouped['b'].sum() > 1, df_grouped['a'].max())
print (s2)


In [69]: %%timeit
    ...: df_grouped = df.groupby('group')
    ...: s1 = df_grouped.apply(lambda grp: grp['a'].sum() if grp['b'].sum() > 1 else grp['a'].max())
    ...: 
24.8 ms ± 228 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [70]: %%timeit
    ...: df_grouped = df.groupby('group')
    ...: s2 = df_grouped['a'].sum().where(df_grouped['b'].sum() > 1, df_grouped['a'].max())
    ...: 
1.63 ms ± 58 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫基于另一列替换值条件

筛选是否根据一列的最大值(取决于另一列的条件)是否等于特定值进行分组

按一列分组,然后在熊猫中查找另一列的总和和最大值

以另一列的最小值/最大值作为条件作为 SUM 进行测量

熊猫将条件应用于基于另一列的列值

熊猫按条件按列值分组

对熊猫数据框中的一列求和,其中一列满足条件,但另一列分组

根据另一列分组的另一列的最大值获取值

熊猫:基于另一列的上一行值的条件总和

熊猫分组多个列根据条件取另一列的平均值

基于另一列中的值分组后的条件总和

基于另一列的熊猫条件转移

如何选择*并按一列分组,同时选择另一列的最大值?

熊猫分组并根据条件添加列数据

熊猫:按符合条件的列分组

熊猫分组-基于另一列的值占分组总数的百分比

根据给定的熊猫条件随机分组数据

通过包括按条件分组的列在熊猫中分组

熊猫分组依据和基于条件的计算

根据条件填充另一列(熊猫)的空值

熊猫骨料与另一列的最大分组?

通过另一列熊猫找到列组的最大值

熊猫:从另一列中的每个唯一值中获取一列的最大值

根据另一列中的最大值为熊猫数据框中的给定子索引创建一个新列

分组时根据另一列的值对一列进行条件求和

熊猫分组但保留另一列

熊猫,从一列中选择最大值,从另一列中选择最小值

熊猫根据选择为条件的另一列中的值创建一列

用另一列的条件填充一列并移动熊猫中的值