我有一个如下所示的数据框:
TF name
0 A
1 A
0 A
0 A
1 B
1 B
0 B
1 B
1 B
我需要生成一个结果数据框,它可以计算我的数据框中每个人有多少0和1。
所以上面的结果是:
name True False
A 3 1
B 1 4
我认为groupby
在这种情况下无效。循环和计数以外的任何解决方案?
答案 0 :(得分:4)
您可以执行groupby
让 TF 成为分组键。获取名称列的相应value_counts
以获取不同的计数。
多索引系列的取消堆栈level=0
,以便生成数据框对象。最后,通过将它们类型转换为布尔值来重命名整数列。
df.groupby('TF')['name'].value_counts().unstack(0).rename(columns=bool)
使列名采用字符串值:
1)使用lambda
功能:
<...operations on df...>.rename(columns=lambda x: str(x.astype(bool)))
2)或将语法链接在一起:
<...operations on df...>.rename(columns=bool).rename(columns=str)
答案 1 :(得分:2)
我首先将您的列转换为布尔值,然后按名称和TF进行分组,然后将布尔列TF取消堆栈。
df['TF']=df['TF'].astype(bool)
df.groupby(['name', 'TF']).size().unstack('TF')
TF False True
name
A 3 1
B 1 4