我已经搜索了很多很多其他SO帖子来回答这个问题,但还没有找到我正在寻找的东西。这是:
假设我们有一个如下所示的数据框:
In [7]: df.head(5)
Out[7]:
bool_flag group int_flag
0 False bottom 0
1 False mid 1
2 False top 1
3 False top 0
4 False high 1
其中有五个唯一的组,两个唯一的布尔值和两个唯一的整数值。我想创建一个这样的汇总表:
bottom low mid high top
bool_flag true 5 32 2 12 4
false 2 42 7 2 10
int_flag 0 1 10 15 3 8
1 10 31 14 0 1
总结每个非group
列的唯一值计数,并按group
列分组。
我已经接近了。以下pivot_table
命令为我提供了类似于我想要的组件的表。
In [8]: pd.pivot_table(df.drop('bool_flag', axis=1), columns=['group'], index=['int_flag'], aggfunc=len)
Out[8]:
group bottom high low mid top
int_flag
0 15 11 8 13 13
1 12 5 8 9 6
In [9]: pd.pivot_table(df.drop('int_flag', axis=1), columns=['group'], index=['bool_flag'], aggfunc=len)
Out[9]:
group bottom high low mid top
bool_flag
False 19 14 15 18 16
True 8 2 1 4 3
但是,结果表的index
不是我想要的Multiindex
,因此会使bool_flag
的枢轴表连接更加困难groupby
我希望有一种方法可以使用pivot_table
或(False, 0)
来获得我想要的东西,而不会生成这些子表格并将它们连接起来,但到目前为止我还没有找到它。使用多个索引列进行透视会导致表格过于细化(我不希望(bool_flag, int_flag)
对group
个值计数,例如,每个groupby('group').agg(f)
中的每个唯一值的计数{{ 1}}。)
我还尝试使用f
,我在其中定义value_counts()
以产生在每个系列上调用agg
的结果。但是,DataFrame
与返回prepareForSegue
s。
任何建议都将不胜感激!
答案 0 :(得分:2)
实际上,我并不认为我所要求的是可能的。通过执行以下操作,将上面显示的两个数据透视表的索引设置为MultiIndex
:
x = pd.pivot_table(df.drop('int_flag', axis=1), columns=['group'], index=['bool_flag'], aggfunc=len)
y = pd.pivot_table(df.drop('bool_flag', axis=1), columns=['group'], index=['int_flag'], aggfunc=len)
def multiindex_from_pivot_result(df):
return pd.MultiIndex.from_tuples([(df.index.name, val) for val in df.index], names=['feature', 'values'])
xx = x.set_index(multiindex_from_pivot_result(x))
yy = y.set_index(multiindex_from_pivot_result(y))
会产生如下表格:
group bottom high low mid top
feature values
bool_flag False 19 14 15 18 16
True 8 2 1 4 3
和
group bottom high low mid top
feature values
int_flag 0 15 11 8 13 13
1 12 5 8 9 6
然而,像这样连接它们
pd.concat([yy, xx])
生成一个包含我想要的值的表,但其索引的第二级被第一帧的索引值覆盖。
In [24]: pd.concat([yy, xx])
Out[24]:
group bottom high low mid top
feature values
int_flag 0 15 11 8 13 13
1 12 5 8 9 6
bool_flag 0 19 14 15 18 16
1 8 2 1 4 3
不幸的是,这让我可以选择将索引级别重置为普通列,而不能正常打印。
希望这有助于某人!