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

熊猫将groupby函数有效地应用于每一列[重复]

龚跃
2023-03-14

pandas中,可以对数据帧中的每一列应用一些groupby函数,例如:

pt=df.groupby(['Group']).sum().reset_index()

假设我想应用一个lambda函数lambda x:(0

import pandas as pd

df=pd.DataFrame({'Group':['W', 'W', 'W', 'E','E','E','N'],
'A':[0,1,5,0,1,5,7],
'B':[1,0,5,0,0,2,0],
'C':[1,1,5,0,0,5,0],
'Total':[2,2,15,0,1,12,7]
})

#Check how many items are present in Group
grp=df.groupby(['Group'])
pt1 = grp['A'].apply(lambda x: (0 < x).sum()).reset_index()
pt2 = grp['B'].apply(lambda x: (0 < x).sum()).reset_index()
pt3 = grp['C'].apply(lambda x: (0 < x).sum()).reset_index()

pct=pd.merge(pt1, pt2, on=['Group'])
pct=pd.merge(pt2, pct, on=['Group'])

#Get total items and merge with counts
pt = df.groupby(['Group'])['Total'].count().reset_index()
pct=pd.merge(pt, pct, on=['Group'])

输出:

  Group  Total  C  A  B
0     E      3  1  2  1
1     N      1  0  1  0
2     W      3  3  2  2

为n列写它的有效方法是什么?


共有1个答案

濮宇定
2023-03-14

我能想到的最干净的方法是:

(df > 0).groupby(df['Group']).agg({'A': 'sum', 'B': 'sum', 'C': 'sum', 'Total': 'count'})
Out: 
         C  Total    B    A
Group                      
E      1.0      3  1.0  2.0
N      0.0      1  0.0  1.0
W      3.0      3  2.0  2.0

如果需要,可以排序并强制转换为int:

((df > 0).groupby(df['Group']).agg({'A': 'sum', 'B': 'sum', 'C': 'sum', 'Total': 'count'})
                              .sort_index(axis=1).astype('int')
Out: 
       A  B  C  Total
Group                
E      2  1  1      3
N      1  0  0      1
W      2  2  3      3
 类似资料:
  • 问题内容: 在您希望POS标记存储在熊猫数据框中的一列文本(每行只有一句话)的情况下,SO上的大多数实现都使用apply方法 NLTK文档建议使用pos_tag_sents()有效标记多个句子。 这是否适用于此示例,如果是,那么代码是否像更改为那样简单,或者NLTK意味着段落的文本源 正如评论中提到的那样,目的是每次都减少感受器的负载, 但是问题是如何做到这一点,并且仍然在熊猫数据框中生成一列?

  • 问题内容: 我有一个熊猫DataFrame,其中包含多个列: 我想基于对数据框的每一行应用一个函数为此数据框创建两个新列。我不想多次调用该函数(例如,通过执行两次单独的调用),因为它占用大量计算资源。我尝试通过两种方式来执行此操作,但它们都不起作用: 使用: 我编写了一个函数,该函数接受a并返回我想要的值的元组: 尝试将此应用于DataFrame会出现错误: 然后,我将使用此问题中显示的方法将从返

  • 我想应用一个自定义函数并创建一个名为population2050的派生列,该列基于数据框中已经存在的两列。 当我运行上面的代码时,我得到一个错误。我是否没有正确使用“应用”功能?

  • 我必须根据以下col1、col2和loc的数据进行分组,并计算col3中的项数。此外,还应考虑开始和结束日期,即日期应在2021 1月1日至2021 1月31日之间。最终结果应显示在col4中。 数据 预期输出

  • 有人能解释一下为什么这个代码不起作用吗? 它返回错误:TypeError:(“'NoneType'对象不可调用”,“发生在索引0上”)数据帧df在某些单元格中包含一些None值。我的意图是对所有非无值应用函数。

  • 问题内容: 在 pandas groupby上发布了一个新的更通用的问题:每个组中的前3个值并存储在DataFrame中,并且在那里已经找到了可行的解决方案。 在此示例中,我创建了一个数据帧,其中的一些随机数据间隔为5分钟。我想创建一个数据框( df分组 ),其中列出了每小时的 3个最高值 。 即:从这一系列价值 我非常接近解决方案,但我找不到最后一步的正确语法。我到现在为止()的结果是: 我想从