当前位置: 首页 > 知识库问答 >
问题:

一种基于不同列的优雅高效的中值查找方法

储修谨
2023-03-14

我有一个如下所示的dataframe,但我真正的dataframe有数百万行

te_df = pd.DataFrame({'subject_id':[1,1,1,2,2,2,3,3],
                      'test':['test1','test2','test3','test1','test2','test3','test1','test4'],
              '0-24hrs':[1,1,1,2,1,1,np.nan,np.nan],
              '24-48hrs':[np.nan,np.nan,np.nan,1,1,1,2,1],
              '48-72hrs':[2,3,1,3,3,np.nan,np.nan,np.nan]
                    })

我想查找每24小时执行测试的中位数次数(使用测试列标识)(使用0-24hrs24-48hrs48-72hrs)

我试过下面的

df_out = pd.DataFrame()
df_out['1st_24'] = te_df.groupby('test')['0-24hrs'].median()
df_out['2nd_24'] = te_df.groupby('test')['24-48hrs'].median()
df_out['3rd_24'] = te_df.groupby('test')['48-72hrs'].median()

而不是重复同一行三次,有没有其他高效优雅的方法来找到这一点?因为我真正的数据帧有几百万行


共有2个答案

卢书
2023-03-14

为什么不试试呢

out = df.groupby('test')[['0-24hrs', '24-48hrs', '48-72hrs']].median()
       0-24hrs  24-48hrs  48-72hrs
test                              
test1      1.5       1.5       2.5
test2      1.0       1.0       3.0
test3      1.0       1.0       1.0
test4      NaN       1.0       NaN
东郭弘
2023-03-14

您也可以通过以下方式来实现:-

df_out=te_df.groupby('test').median().drop(columns=['subject_id'])

#output

       0-24hrs  24-48hrs    48-72hrs
test            
test1   1.5     1.5         2.5
test2   1.0     1.0         3.0
test3   1.0     1.0         1.0
test4   NaN     1.0         NaN

注意:在@beny的方法通过传递列表访问列值中,您不会得到警告:

out = df.groupby('test')[['0-24hrs', '24-48hrs', '48-72hrs']].median()
 类似资料:
  • 问题内容: 例: 结果是: 如您所见,与列表相比,对数组进行屏蔽的操作更为优雅。如果您尝试使用列表中的数组屏蔽方案,则会收到错误消息: 问题是要为s找到一个优雅的蒙版。 更新: 通过引入的答案,但是提出的要点使解决方案完全符合我的兴趣。 问题答案: 你在找 文档中的示例 相当于:

  • 我有一个非常大(约10万)的字典列表: 给定一个ID(例如),我如何以有效的方式找到相应的?我必须为每个列表多次这样做(我有几个这样的大列表,每个列表我有几个令牌ID)。 我目前正在遍历列表中的每个词典,检查是否与我的输入ID匹配,如果匹配,我将获得

  • 我正在写一个国际象棋引擎,我需要一种有效的方法,将多个列表合并成一个按最小值排序的单数列表。 每个列表本质上是一组棋子,它们已经按照完美的攻击顺序排列。例如,我在a2上有一个白色的皇后,在b3上有一个白色的主教,在f1上有一个白色的车,在F2上有一个白色的车。现在假设我在f7上有一个黑色棋子,那么所有四个白色棋子从两个不同的离散方向汇聚在f7广场上--东北(皇后&毕晓普)和北方(鲁克斯)。 一些代

  • 问题内容: SQL Server2005。我有一个带有ColumnA位,ColumnB int的表 我可以添加默认值,以便如果为1则为15,如果为0则为0? 我知道我可以用扳机做到这一点,但我的老板对扳机存有偏见(他需要扳机敏感性培训)。 问题答案: 如果您的ColumnB只能为15或零,则可以使其成为基于ColumnA的计算列。这是添加新的计算列的代码:

  • 假设我们想检查一个矩阵(或数据框)中的哪些行存在于另一个矩阵中。我找到的所有解决方案,这个肯定基本的操作似乎要么需要一个库(这个{data.table} 4-线性),要么是冗长和模糊的,例如: 有人知道一种使用基函数的更优雅的方法,其效率与本例相当吗? 代码无效。

  • 问题内容: 一个激励人的例子: 实施各种调度“策略”,对“作业”列表进行排序。 一种非常简单的策略是首先执行最短的作业(不考虑其权重/优先级)。 嗯,这种策略只不过是对job.length进行排序,因此让我们使用sort包。定义一个自定义类型,并实现sort.Interface … 好了,现在回到我们的简单策略… 嗯… 问题答案: 首先, 即使您使用like ,也看不到任何定义 。 我认为您的意思