Pandas上countifs()的透视表

2024-10-06 13:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,它是一个标识符ID和数据中一些特征的标志,例如:

In [86]: frame = pd.DataFrame({"key": [1,2,3,4,5,6,7,8,9], "flag1": [0,1,0,1,0,1,0,1,1], "flag2": [0,0,1,1,0,0,1,1,0], "flag3": [0,0,0,0,1,1,1,1,1]}, columns=['key','flag1','flag2','flag3'])

In [87]: frame
Out[87]:
   key  flag1  flag2  flag3
0    1      0      0      0
1    2      1      0      0
2    3      0      1      0
3    4      1      1      0
4    5      0      0      1
5    6      1      0      1
6    7      0      1      1
7    8      1      1      1
8    9      1      0      1

我希望输出一个数据集,该数据集提供满足这两个标志时的计数作为透视表,例如:

   flags  flag1  flag2  flag3
0  flag1      5      2      3
1  flag2      2      4      2
2  flag3      3      2      5

我想我必须在两个循环上迭代frame.keys()[1:],但我不知道如何填充第二个数据集。我应该模仿这个Google工作表的行为,但我的实际数据集太大,无法使用Sheets/Excel(大约200万行60列): https://docs.google.com/spreadsheets/d/1emEm9RtxPAFceUgalCVbzr0mGNoZEMFjWwqSjrxyAuE/edit?usp=sharing


Tags: columns数据keyiniddataframe标志特征
1条回答
网友
1楼 · 发布于 2024-10-06 13:25:27

让我们删除key,我们不需要它。在此之后,解决方案基本上是一个矩阵dot积:

v = frame.drop('key', 1)
v.T.dot(v)

       flag1  flag2  flag3
flag1      5      2      3
flag2      2      4      2
flag3      3      2      5

或者更有效地使用del删除key列:

del frame['key']
frame.T.dot(frame)

       flag1  flag2  flag3
flag1      5      2      3
flag2      2      4      2
flag3      3      2      5

相关问题 更多 >