我有一个包含食物信息的大数据框。例如:
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函数。最终的想法是当我们获得更多的数据时,自动化这个过程,而不必依靠手动改变未来的年份测向位置代码。你知道吗
有办法吗?你知道吗
正如您所猜测的,您需要对自定义函数使用
groupby
加上apply
。你知道吗使用示例输入,将返回:
有关函数的更多详细信息:
journal_uniq
是第一列中的值。它统计列'Journal'
中的唯一值使用nunique
,您已经完成了此步骤。你知道吗journal_subs
是第2列中的值。因为您需要唯一的日志,所以还需要对'Journal'
进行分组,并检查'Subscription'
的和是否大于零。第二个sum
函数对True
值的数目求和(True转换为1,False转换为0)。你知道吗journal_author
是第3列中的值。第二列的逻辑是相同的,但要复杂一些,因为您需要检查同一行的'Subscription'
和'Known_author'
列是否都等于1。你知道吗pandas.Series
是最终数据帧的一行。你知道吗相关问题 更多 >
编程相关推荐