我的数据框如下:
MID POSITION
1 22596394 R8
2 22596394 R8
3 22596394 R8
4 22591549 R6
5 22591549 R6
6 22591549 R6
现在我有另一个数据帧,它将在运行一些代码后输出,如下所示:
Position Usage
R1 0
R2 0
R3 0
R4 0
R5 0
R6 1
R7 0
R8 1
L1 0
L2 0
L3 0
...
L8 0
我想根据以下逻辑填写Usage列:
无论MID何时发生变化,请注意相应的POSITION并填写输出数据框中对应的Usage行,例如:在上面的数据框中,R8和R6用法行应填充1,其余位置列用0填充。同样如果对于同一位置,MID更改两次,例如R6,例如R6 Usage行应填充2,依此类推。最好的方法是什么?提前谢谢!
答案 0 :(得分:1)
print (df1.groupby('POSITION')['MID'].nunique())
POSITION
R6 1
R8 1
Name: MID, dtype: int64
print (df1.groupby('POSITION')['MID']
.nunique()
.reindex(df2.set_index('Position').index, fill_value=0)
.rename('Usage')
.reset_index())
Position Usage
0 R1 0
1 R2 0
2 R3 0
3 R4 0
4 R5 0
5 R6 1
6 R7 0
7 R8 1
8 L1 0
9 L2 0
10 L3 0
说明:
要确定每个组的唯一值数量,需要POSITION
列groupby
,然后在MID
列上汇总nunique
。您获得了索引为Series
和R6
的新R8
。然后,需要添加df2
和列Position
中的其他值。因此,如果值是唯一的,那么一个可行的解决方案是从set_index
列index
创建position
,然后在index
df1
中创建reindex
个值index
的{{1}}。获取一些由df2
(参数NaN
)替换的0
。然后需要从索引创建新列 - 首先按rename
重命名fill_value=0
名称,然后重新reset_index
- 得到好Series
。