所以我有一个包含3列名称的pandas数据帧。看起来像这样:
+-------------+-------------+-------------+
| NameColumn1 | NameColumn2 | NameColumn3 |
+-------------+-------------+-------------+
| Name1 | Name2 | Name3 |
| Name1 | Name2 | Name6 |
| Name1 | Name2 | Name8 |
| Name1 | Name4 | Name5 |
+-------------+-------------+-------------+
现在我想在其左侧的列中添加3个包含每个名称唯一值计数的新列。
因此,例如,我想要添加的第一列是Column2中每个唯一名称在Column2中的唯一名称计数。因此,它是2(Name2和Name4)并将其添加到数据帧。
对于第3列和第2列中的名称,它将是3(name3,name6和name8)。
所以对于这样的例子:
+----------+----------+----------+-------------+-------------+--+
| NameCol1 | NameCol2 | NameCol3 | CountOfCol2 | CountOfCol3 | |
+----------+----------+----------+-------------+-------------+--+
| Name1 | Name2 | Name3 | 2 | 3 | |
| Name1 | Name2 | Name6 | 2 | 3 | |
| Name1 | Name2 | Name8 | 2 | 3 | |
| Name1 | Name4 | Name5 | 2 | 1 | |
+----------+----------+----------+-------------+-------------+--+
答案 0 :(得分:0)
这是如何得到第2列和第3列的答案:计算按源分组的唯一对与源,目标对,用变换广播结果。
In [60]:df.groupby('NameColumn2')[['NameColumn2','NameColumn3']].transform(lambda x: x.nunique())['NameColumn3']
Out[60]:
0 3
1 3
2 3
3 1
Name: NameColumn3, dtype: int64
在上面的公式中将2替换为x,将y替换为3,以获得独特的columnx,columny对的countofColy结果