将df过滤为一个简单的电子表格



我有一个简单的数据帧。


        SITE    OPERTN
152     R1H12    V011
200     RR801    V014
342     RM301    V011
375     RTH08    V011
469     RYJ02    V011
... ... ...
634503  RRK15   V011
634763  RRVNQ   V014
635237  R1H12   V011
635512  RTH08   V011
635548  RJE01   V011
4689 rows × 2 columns

我想把它转换成一个简单的电子表格类型的表格:

site    V011   V012   V014
R1H12   count  count  count
RR801   count  count  count
RM301   count  count  count
RTH08   count  count  count
etc

我试过旋转它和pivot_table,但无法用agfunc=sum来完成。

您可以使用pd.crosstab():

pd.crosstab(df['SITE'], df['OPERTN'])

df.group_by(),例如:

df.groupby(['SITE', 'OPERTN']).size().unstack(fill_value=0)

应该可以使用:

df. pivot_table(values='OPERTN' , rows='SITE', cols='OPERTN', 
                     aggfunc=lambda x: len(x.unique())

这可以实现您的要求,还可以将null替换为0s,在计数时找不到'SITE'的值。

需要记住的一点是,有一个类似的函数叫做"pivot"。下面的一个是"pivot_table",它是pandas库的一个方法,而"pivot"是在DataFrame上调用的一个函数。使用任何一种方法都可以获得类似的结果,但"pivot"无法聚合数据,并且需要传递给它们的参数略有不同。

df = pd.pivot_table(df,values='OPERTN' , index='SITE', columns='OPERTN', 
                     aggfunc={'OPERTN':'count'}).fillna(0)

最新更新