如何在Pandas数据框中运行循环以追加列?

时间:2016-10-20 08:02:25

标签: python python-2.7 pandas

我的数据框如下:

    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,依此类推。最好的方法是什么?提前谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您需要nunique然后reindex

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

说明:

要确定每个组的唯一值数量,需要POSITIONgroupby,然后在MID列上汇总nunique。您获得了索引为SeriesR6的新R8。然后,需要添加df2和列Position中的其他值。因此,如果值是唯一的,那么一个可行的解决方案是从set_indexindex创建position,然后在index df1中创建reindex个值index的{​​{1}}。获取一些由df2(参数NaN)替换的0。然后需要从索引创建新列 - 首先按rename重命名fill_value=0名称,然后重新reset_index - 得到好Series