我遇到了以下问题,但我很遗憾无法通过自己或者我在stackoverflow上发现的类似问题来解决这个问题。
为了简单起见,我将简要介绍一下我的问题:
我得到了一个包含多个列和一列的Dataframe,用于指示用户的ID。可能会发生同一用户在此数据框中有多个条目:
| | userID | col2 | col3 |
+---+-----------+----------------+-------+
| 1 | 1 | a | b |
| 2 | 1 | c | d |
| 3 | 2 | a | a |
| 4 | 3 | d | e |
像这样的东西。现在我想知道属于某个userID的行数。对于这个操作,我尝试使用df.groupby('userID').size()
作为回报,我想用于另一个简单的计算,比如分割它。
但是当我尝试在单独的列中保存计算结果时,我不断获得NaN值。
有没有办法解决这个问题,以便我在单独的列中得到计算结果?
感谢您的帮助!
编辑//
要弄清楚,我的输出应该如何。可以说,上面的数据帧是我的主要数据框架。除了这个框架,我得到了第二帧看起来像这样:
| | userID | value | value/appearances |
+---+-----------+----------------+-------+
| 1 | 1 | 10 | 10 / 2 = 5 |
| 3 | 2 | 20 | 20 / 1 = 20 |
| 4 | 3 | 30 | 30 / 1 = 30 |
所以我基本上希望在列'value / appearances'中将值列中的数字的结果除以主数据帧中该特定用户的出现次数。对于ID = 1的用户,这将是10/2,因为该用户的值为10并且在主数据帧中有2行。 我希望这会让它更清晰一点。
答案 0 :(得分:2)
您想要执行以下操作的IIUC,{user}上的groupby
并在分组列上调用transform
并传递'size'以标识要调用的方法:
In [54]:
df['size'] = df.groupby('userID')['userID'].transform('size')
df
Out[54]:
userID col2 col3 size
1 1 a b 2
2 1 c d 2
3 2 a a 1
4 3 d e 1
你尝试了什么:
In [55]:
df.groupby('userID').size()
Out[55]:
userID
1 2
2 1
3 1
dtype: int64
当分配回df与df索引对齐时,它为最后一行引入了NaN
:
In [57]:
df['size'] = df.groupby('userID').size()
df
Out[57]:
userID col2 col3 size
1 1 a b 2
2 1 c d 1
3 2 a a 1
4 3 d e NaN