Python 如何在数据帧内运行循环以附加列?

Python 如何在数据帧内运行循环以附加列?,python,python-2.7,pandas,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

我有一个数据帧,如下所示:

    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
我想按照以下逻辑填写用法栏:

在MID发生变化的地方,记录相应的位置并填写输出数据框中相应的使用行,例如:在上述数据框中,R8和R6使用行应填写1,其余位置列应填写0。同样,如果同一位置的MID更改两次,例如R6,则R6使用行应填充2,依此类推。最好的方法是什么?提前谢谢

我认为您需要,然后:

说明:


用于按列
位置
获取每组唯一值的数量,然后按列
中间
聚集。您将获得索引为
R6
R8
的新
Series
。然后需要从
df2
和列
Position
中添加另一个值。因此,如果值是唯一的,一个可行的解决方案是从列
position
by创建
index
,然后通过
df2
index
创建
index
中的值。获取一些
NaN
,它们被
0
替换(参数
fill\u value=0
)。然后需要从索引中创建新列-首先重命名
系列
命名依据,最后-获取nice
数据帧

您可以从输入中添加所需的输出吗?我已经更新了输出数据帧。为了让它更清楚,让我们假设中间改变了2次,当时的立场仍然是说R6。那么R6对应的用法行应该填充2,以此类推。谢谢Hmmm,但在
R6
R8
中,“MID”没有改变。它是相同值的3倍。很抱歉,我不能说清楚。让我们说,中间应该是唯一的,并且位置已被注明。例如,在上表中,R6和R8的用法是1,因为它只有一个唯一的MID。希望这能说明问题。如果我想填充用法列,它不应该是用法而不是位置(df2.set_index('Position')。index,fill_value=0)中的位置吗。再次感谢!很高兴能帮助你!天气真好!根据您的描述,我不认为您想要
nunique
而是更像
(df.POSITION[1:][~~(df.MID.shift(1)==df.MID)[1:][])
。当MID更改时,您需要相应的位置。。。至少你一开始是这样描述的,但后来你提到了一些关于唯一性的东西……相反,一些东西的效果是:
(df.POSITION[1:][~(df.MID.shift(1)=df.MID)[1:]].value_counts().reindex(['R1','R2','R3','R4','R5','R6',fill_value=0)
或者使用这个答案中使用的巧妙的
索引
技巧jezrael。
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