如何使用groupby和.loc顺序过滤数据帧

瓦伦丁C.

我有一个大型数据框,其中包含有关食品的信息。例如:

     Year    Journal    Subscription    Known_author
0    2014       A            1               1
1    2014       A            1               0 
2    2014       B            0               1
3    2014       C            1               0
4    2015       A            1               1
5    2015       B            1               1
6    2015       C            0               1
7    2015       D            0               0

我希望能够按年份分组并创建一个表,该表包含(1)每年的唯一期刊数,(2)拥有订阅的独特期刊数和(3)拥有订阅的独特期刊数和一位知名作家。

在这种情况下,这就是我要查找的表:

Year   (1) Column         (2) Column      (3) Column
2014       3                   2               1
2015       4                   2               2 

我用过了:

(1)df.groupby('Pub_Date_Year')['Journal'].agg('nunique')第一栏

(2) df.loc[(df['Subscription']==1)&(df['Year']==2014),'Journal'].agg(['nunique']).values[0]

(3) df.loc[(df['Subscription']==1)&(df['Known_author']==1)&(df['Year']==2014),'Journal'].agg(['nunique']).values[0]

但是,我希望一次性创建该表,我假设使用groupby,aggregate和某种lambda函数。最终的想法是随着我们获得更多数据而使此过程自动化,而不必依靠手动更改df.loc代码中的年份。

有没有办法做到这一点?

华伦天奴

如您所料,您需要在自定义函数中使用groupbyplus apply

def grouping(x):
    journal_uniq = x['Journal'].nunique()
    journal_subs = x.groupby('Journal').apply(lambda d : d['Subscription'].sum() > 0).sum()
    journal_author = x.groupby('Journal').apply(lambda d : ((((d['Subscription'] == 1) & (d['Known_author'] == 1)).sum()) > 0)).sum()
    return pd.Series([journal_uniq, journal_subs, journal_author])

ddf = df.groupby('Year').apply(grouping)

使用示例输入,将返回:

      0  1  2
Year         
2014  3  2  1
2015  4  2  2

有关该功能的更多详细信息:

  • journal_uniq是第一列中的值。'Journal'使用来计算列中的唯一值nunique
  • journal_subs是第二列中的值。由于您需要唯一的日记帐,因此您也需要分组,'Journal'并检查的总和'Subscription'是否大于零。第二个sum函数将True的数量相加(True强制转换为1,False强制转换为0)。
  • journal_author是第三列中的值。第二列的逻辑相同,但更为复杂,因为您需要检查同一行的'Subscription''Known_author'都等于1。
  • 返回的pandas.Series是最终数据帧的一行。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用熊猫数据帧如何聚合和GROUPBY和非聚集/ GROUPBY列带来

如何分组,并基于和过滤数据帧?

如何过滤pyspark数据帧

如何在多个条件和 groupby 下使用 .loc

使用formattable过滤数据帧

如何使用函数过滤数据帧?

如何通过同时使用loc和列名来删除数据帧中的多列

如何使用groupby和筛选数据框架创建新列

如何在子数据帧上过滤多维数据帧

优化-数据帧聚合在聚合过程中将使用不同的过滤器:df.loc吗?

Scala 数据帧如何过滤掉?

使用Dask并行过滤数据帧的块

使用阈值级别熊猫过滤数据帧

使用for循环在R中过滤数据帧

R使用向量过滤数据帧

使用“或”条件过滤数据帧组

如何使用循环为数据帧赋予顺序名称?

如何使用过滤器和 groupBy 在 Scala 和 Quill 中表达此 SQL 查询?

使用保留,丢弃和过滤将数据帧保留在数据帧列表中

如何像在SQL中一样使用'in'和'not in'过滤Pandas数据帧

如何使用dplyr的filter()和R-base的ifelse()过滤数据帧?

如何使用dplyr和整洁的评估以编程方式过滤数据帧?

如何在Python和Pandas中使用for循环创建许多过滤的数据帧?

使用 pd.loc 将函数应用于 pandas 数据帧的多行和多列

如何使用 pipe.jl 过滤数据帧行?

如何使用字符向量过滤数据帧

如何在groupby和两个条件下在熊猫中使用.loc

如何使用groupby和lamda表达式为.loc指定日期范围?

过滤和分组数据到新的数据帧