我有一个简单的数据帧。
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)