我正在尝试使用熊猫将过滤器添加到组中。 在下面的棒球数据中,我希望计算出归纳栏中从初始“ N”到最终“ Y”所需的平均时间。 本质上,我希望计算的是在归纳列中包括“ Y”并且具有多行的每组的长度。 任何提示都会有所帮助!

   playerID  yearid votedBy  ballots  needed  votes inducted category needed_note
2860  aaronha01    1982   BBWAA      415     312    406        Y   Player         NaN
3743  abbotji01    2005   BBWAA      516     387     13        N   Player         NaN
 146  adamsba01    1937   BBWAA      201     151      8        N   Player         NaN
 259  adamsba01    1938   BBWAA      262     197     11        N   Player         NaN
 384  adamsba01    1939   BBWAA      274     206     11        N   Player         NaN
 497  adamsba01    1942   BBWAA      233     175     11        N   Player         NaN
 574  adamsba01    1945   BBWAA      247     186      7        N   Player         NaN
2108  adamsbo03    1966   BBWAA      302     227      1        N   Player         NaN

===============>>#1 票数:0

我修改了数据集,以便有两个这样的组。 一个从NY有2行,另一个从NY有8行。 这取决于您是否计算包含y的行。 如果没有,它将分为两组,一组包含1行,另一组包含7行。 看起来您没有时间序列列,因此我想这意味着各行按时间均匀分布。

In [25]:

df=pd.read_clipboard()
print df
       playerID  yearid votedBy  ballots  needed  votes inducted category  needed_note 
3741  abbotji01    2005   BBWAA      516     387     13        N   Player          NaN 
2860  aaronha01    1982   BBWAA      415     312    406        Y   Player          NaN 
3743  abbotji01    2005   BBWAA      516     387     13        N   Player          NaN 
146   adamsba01    1937   BBWAA      201     151      8        N   Player          NaN 
259   adamsba01    1938   BBWAA      262     197     11        N   Player          NaN 
384   adamsba01    1939   BBWAA      274     206     11        N   Player          NaN 
497   adamsba01    1942   BBWAA      233     175     11        N   Player          NaN 
574   adamsba01    1945   BBWAA      247     186      7        N   Player          NaN 
2108  adamsbo03    1966   BBWAA      302     227      1        N   Player          NaN 
2861  aaronha01    1982   BBWAA      415     312    406        Y   Player          NaN 

In [26]:

df['isY']=(df.inducted=='Y')
df['isY']=np.hstack((0,df['isY'].cumsum().values[:-1])).T
In [27]:

print df.groupby('isY').count()
     playerID  yearid  votedBy  ballots  needed  votes  inducted  category  needed_note  isY 
0           2       2        2        2       2      2         2         2            0    2 
1           8       8        8        8       8      8         8         8            0    8 
[2 rows x 10 columns]    

假设您不计算Y ,则均值可以通过以下方式计算:

df2=df.groupby('isY').count().isY-1
df2[df2!=1].mean()

===============>>#2 票数:0

我模拟了自己的数据,以轻松测试您的问题。 我创建了一组名为df_inducted的播放器,其中包括最终被引入的播放器,然后通过使用isin()函数,我们可以确保仅在分析中考虑它们。 然后,我找到它们的日期的最小值和最大值,并将它们的差平均。

import pandas as pd

df = pd.DataFrame({'player':['Nate','Will','Nate','Will'], 
                   'inducted': ['Y','Y','N','N'],
                   'date':[2014,2000,2011,1999]})

df_inducted = df[df.inducted=='Y']
df_subset = df[df.player.isin(df_inducted.player)]

maxs = df_subset.groupby('player')['date'].max()
mins = df_subset.groupby('player')['date'].min()

maxs = pd.DataFrame(maxs)
maxs.columns = ['max_date']
mins = pd.DataFrame(mins)
mins.columns = ['min_date']

min_and_max = maxs.join(mins)
final = min_and_max['max_date'] - min_and_max['min_date']

print "average time:", final.mean()

===============>>#3 票数:0

DataFrameGroupBy过滤方法在组中的每个子帧上运行。 请参阅help(pd.core.groupby.DataFrameGroupBy.filter) 数据是:

print df
  inducted playerID
0        Y        a
1        N        a
2        N        a
3        Y        b
4        N        b
5        N        c
6        N        c
7        N        c

示例代码:

import pandas as pd

g = df.groupby('playerID')
madeit = g.filter(
        lambda subframe:
                'Y' in set(subframe.inducted)).groupby('playerID')

# The filter removed player 'c' who never has inducted == 'Y'
print madeit.head()
           inducted playerID
playerID                    
a        0        Y        a
         1        N        a
         2        N        a
b        3        Y        b
         4        N        b

# The 'aggregate' function applies a function to each subframe
print madeit.aggregate(len)
          inducted
playerID          
a                3
b                2

  ask by user3180797 translate from so

未解决问题?本站智能推荐:

1回复

熊猫组,过滤和情节

我有一个数据帧 等等 ... 我希望获得类似于下面的每个规则的数据帧:例如,rule_name的数据帧A: 例如,rule_name B的数据帧: 等等。 我目前的解决方案 如您所见,我无法获取规则名称的百分比,而只是绘制count_rule_name
3回复

根据组比较过滤熊猫数据框组

我正在尝试从熊猫数据框中删除损坏的数据。 我想从值框大于上一个组的值差异的数据框中删除组。 这是一个例子: 预期结果: Value 0 1 1 1 2 1 3 2 4 2 5 2 6 3 7 3
1回复

熊猫:按子组的出现次数过滤行

我有一个包含ID,其帖子和其发布日期的数据框(四舍五入为一个月)。 日期是一个索引。 我需要筛选出每月且少于20个月内发布少于100个帖子的所有ID 数据框如下所示: 为了按每月帖子数过滤ID,我使用了以下代码: df.groupby(['id', 'date'], as_i
1回复

熊猫数据框过滤出小尺寸的组

我正在尝试过滤掉小尺寸的组,并且过滤功能抛出ValueError:不允许使用负尺寸。 我不能发布我的代码,因为它太具体了,我不能仅凭随机数据重现该问题。 有人遇到过这个吗? 我看过其他帖子也遇到了同样的错误,但是并没有太大帮助 作为一种变通办法,我正在尝试对filter和groupb
1回复

熊猫groupby键,然后根据组和返回键进行过滤

熊猫执行以下操作的方式是什么? 我不想按ID分组,然后使用组过滤并在条件为真的情况下返回ID。 使用group.filter函数返回原始数据帧。
1回复

熊猫:过滤组中的唯一值

我在超市里有一个包含销售信息的数据框。 数据框中的每一行代表一个项目,具有多个特征作为列。 原始的DataFrame是这样的: 我想过滤掉属于同一票证的重复项目。 例如,在第一张票(TICKET_NUMBER == 001)中,有2种蔬菜,所以我想删除其中的一种。 票号003与肉
3回复

通过与连续组进行比较来过滤大熊猫分组

我有一个这样的熊猫数据框: 我想将此数据帧在date1上分组,然后通过date2 > = PREVIOUS组的date1的记录对每个组进行过滤(并且不会过滤掉date1最小的记录)。 我的最终目标是计算应用过滤器后每个组中剩余的项目数。 过滤将保留以下行: 然后计数
1回复

基于日期频率的熊猫数据框过滤组

我有一个带有下几列的熊猫数据框: 我想要的是按user_id分组,这样我就可以连续15天保留那些拥有数据的用户。 说,如果我有从01-05 (dd-mm)到16-05 (dd-mm)的数据,则将保留引用该用户的行。 例如: 不要害怕询问更多细节! 抱歉,我无法更具体
2回复

熊猫组合两个组,过滤和合并组(计数)

我有一个数据帧,我需要组合两个不同的groupbys,其中一个已过滤。 下表是我希望数据的样子。 首先对'EVENT'计数进行分组,第二个是计算每个ID的成功量('Y') 我已经尝试了一些技术,我发现的壁橱是两个单独的方法,产生以下 group_df = df.groupb
1回复

熊猫过滤

我有一个值得依赖的数据框,如下所示: 然后,我想将原始数据集(df)减少为仅包含与t匹配的项目。 就像是: 要么 谢谢