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