dmi*_*dmi 45 python pivot-table pandas
df2 = pd.DataFrame({'X' : ['X1', 'X1', 'X1', 'X1'], 'Y' : ['Y2','Y1','Y1','Y1'], 'Z' : ['Z3','Z1','Z1','Z2']})
X Y Z
0 X1 Y2 Z3
1 X1 Y1 Z1
2 X1 Y1 Z1
3 X1 Y1 Z2
g=df2.groupby('X')
pd.pivot_table(g, values='X', rows='Y', cols='Z', margins=False, aggfunc='count')
Run Code Online (Sandbox Code Playgroud)
回溯(最近一次调用最后一次):... AttributeError:'Index'对象没有属性'index'
如何获得一个数据透视表,其中包含另外两列的一个DataFrame列的唯一值计数?
是否有aggfunc用于计数独特之处?我应该用np.bincount()吗?
NB.我知道'系列',values_counts()但我需要一个数据透视表.
编辑:输出应该是:
Z Z1 Z2 Z3
Y
Y1 1 1 NaN
Y2 NaN NaN 1
Run Code Online (Sandbox Code Playgroud)
Cha*_*She 71
你的意思是这样的吗?
In [39]: df2.pivot_table(values='X', rows='Y', cols='Z',
aggfunc=lambda x: len(x.unique()))
Out[39]:
Z Z1 Z2 Z3
Y
Y1 1 1 NaN
Y2 NaN NaN 1
Run Code Online (Sandbox Code Playgroud)
请注意,使用len假设您NA的DataFrame中没有s.你可以做x.value_counts().count()或len(x.dropna().unique())不然.
小智 26
我认为这会更完美:
df2.pivot_table(values='X',rows=['Y','Z'],cols='X',aggfunc='count')
X1 X2
Y Z
Y1 Z1 1 1
Z2 1 NaN
Y2 Z3 1 NaN
Run Code Online (Sandbox Code Playgroud)
小智 18
至少版本为0.16的pandas,它没有参数"行"
截至0.23,解决方案是:
df2.pivot_table(values='X', index='Y', columns='Z', aggfunc=pd.Series.nunique)
Run Code Online (Sandbox Code Playgroud)
返回:
Z Z1 Z2 Z3
Y
Y1 1.0 1.0 NaN
Y2 NaN NaN 1.0
Run Code Online (Sandbox Code Playgroud)
aggfunc=pd.Series.nunique提供不同的计数。完整代码如下:
df2.pivot_table(values='X', rows='Y', cols='Z', aggfunc=pd.Series.nunique)
Run Code Online (Sandbox Code Playgroud)
此解决方案归功于@hume(请参阅已接受答案下的评论)。在此处添加答案以提高可发现性。
aggfunc中的参数将pandas.DataFrame.pivot_table采用'nunique'a string,或在 a 中list
pandas 1.5.0out = df2.pivot_table(values='X', index='Y', columns='Z', aggfunc=['nunique', 'count', lambda x: len(x.unique()), len])
[out]:
nunique count <lambda> len
Z Z1 Z2 Z3 Z1 Z2 Z3 Z1 Z2 Z3 Z1 Z2 Z3
Y
Y1 1.0 1.0 NaN 2.0 1.0 NaN 1.0 1.0 NaN 2.0 1.0 NaN
Y2 NaN NaN 1.0 NaN NaN 1.0 NaN NaN 1.0 NaN NaN 1.0
out = df2.pivot_table(values='X', index='Y', columns='Z', aggfunc='nunique')
[out]:
Z Z1 Z2 Z3
Y
Y1 1.0 1.0 NaN
Y2 NaN NaN 1.0
out = df2.pivot_table(values='X', index='Y', columns='Z', aggfunc=['nunique'])
[out]:
nunique
Z Z1 Z2 Z3
Y
Y1 1.0 1.0 NaN
Y2 NaN NaN 1.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112779 次 |
| 最近记录: |