我有这个数据:
df = pd.DataFrame({'col1': ['A', 'A', 'B', 'B', 'B'], 'col2': ['A1', 'B1', 'B1', 'B1', 'A1']})
col1 col2
0 A A1
1 A B1
2 B B1
3 B B1
4 B A1
我做了一次集体表演。结果是一个多索引列。
df = df.groupby(['col1']).agg({'col2': ['nunique','count']})
col2
nunique count
col1
A 2 2
B 2 3
然后,我在海运图书馆做了一个连接图
sns.jointplot(x=['col2','nunique'],y=['col2','count'],data=df,kind='scatter')
我犯了这个错误
TypeError: only integer scalar arrays can be converted to a scalar index
我的问题是:
是否有一种方法可以将多索引列拆分为两个独立的列,如以下所示?
col1 col2_unique col2_count
A 2 2
B 2 3
或
是否有方法将多索引列合并起来?
谢谢你的帮助!
发布于 2018-04-05 11:21:43
您可以通过在列表中指定列col2
来更改聚合,并且在agg
中只使用聚合函数来避免列中的MultiIndex
:
df = df.groupby(['col1'])['col2'].agg(['nunique','count'])
print(df)
nunique count
col1
A 2 2
B 2 3
sns.jointplot(x='nunique', y='count', data=df, kind='scatter')
如果需要在MultiIndex
中使用dictinary
,也可以使用扁平的agg
--例如聚合另一列:
df = df.groupby(['col1']).agg({'col2': ['nunique','count'], 'col1':['min']})
df.columns = df.columns.map('_'.join)
print (df)
col1_min col2_nunique col2_count
col1
A A 2 2
B B 2 3
https://stackoverflow.com/questions/49671050
复制相似问题