Python 将当前的唯一值分解为
我正在将一个整数分配给Python 将当前的唯一值分解为,python,pandas,dataframe,Python,Pandas,Dataframe,我正在将一个整数分配给df中的各个组。我目前正在为此使用pd.factorize。然而,我希望只考虑当前值 例如,使用下面的df,一个唯一的整数被分配给成员。这将基于出现的每个唯一值进行累加。但我希望只考虑当前的价值。与中一样,如果成员中的值没有再次出现,则将该整数指定给成员中的下一个新值。由于C2不再出现在df中,我想将该整数传递给成员中的下一个唯一值 df = pd.DataFrame({ 'Period' :
df
中的各个组。我目前正在为此使用pd.factorize
。然而,我希望只考虑当前值
例如,使用下面的df
,一个唯一的整数被分配给成员
。这将基于出现的每个唯一值进行累加。但我希望只考虑当前的价值。与中一样,如果成员
中的值没有再次出现,则将该整数指定给成员
中的下一个新值。由于C2不再出现在df中,我想将该整数传递给成员中的下一个唯一值
df = pd.DataFrame({
'Period' : [1,1,1,2,2,2,3,3,3,3],
'Member' : ['C1','C2','C4','C1','C2','C4','C1','C3','C4','C5'],
})
df['Area'] = (pd.factorize(df['Member'])[0] + 1)
输出:
预期:
Period Member Area
0 1 C1 1
1 1 C2 2
2 1 C4 3
3 2 C1 1
4 2 C2 2
5 2 C4 3
6 3 C1 1
7 3 C3 2
8 3 C4 3
9 3 C5 4
此输出假定C1、C3、C4、C5
都出现在以下时段下面是我的解决方案,并进行了解释
步骤:
- 获取唯一成员及其计数
- 创建等于成员长度的可用区号列表,按相反顺序排序,以便poping提供最小可用id
- 在“区域”字典中跟踪分配给成员的ID
- 将id分配给成员时成员的递减计数
- 当成员计数为0时,取消分配分配给成员的区域,并将其添加到可用区域,以便可以将其重新用于新成员
注意:这与您解释的逻辑一致,但给出的结果与上面显示的不同
将熊猫作为pd导入
df=pd.DataFrame({
“期间”:[1,1,1,2,2,2,2,3,3,3,3,3],
‘成员’:[‘C1’、‘C2’、‘C4’、‘C1’、‘C2’、‘C3’、‘C4’、‘C1’、‘C3’、‘C4’、‘C5’],
})
def分配_区域(df):
members,counts=pd.np.unique(df.Member,return\u counts=True)
成员计数=dict(zip(成员计数))
面积={}
可用面积=列表(范围(长度(成员),0,-1))
面积_col=[]
对于df中的成员。成员:
如果成员在以下领域:
面积=面积[成员]
其他:
面积=可用面积。pop()
面积[成员]=面积
区域列附加(区域)
成员计数[成员]-=1
如果成员_计数[成员]==0:
可用面积。附加(面积)
可用面积。排序(反向=真)
df[“面积”]=面积
返回df
分配区域(df)
下面是我的解决方案,并给出了解释
步骤:
- 获取唯一成员及其计数
- 创建等于成员长度的可用区号列表,按相反顺序排序,以便poping提供最小可用id
- 在“区域”字典中跟踪分配给成员的ID
- 将id分配给成员时成员的递减计数
- 当成员计数为0时,取消分配分配给成员的区域,并将其添加到可用区域,以便可以将其重新用于新成员
注意:这与您解释的逻辑一致,但给出的结果与上面显示的不同
将熊猫作为pd导入
df=pd.DataFrame({
“期间”:[1,1,1,2,2,2,2,3,3,3,3,3],
‘成员’:[‘C1’、‘C2’、‘C4’、‘C1’、‘C2’、‘C3’、‘C4’、‘C1’、‘C3’、‘C4’、‘C5’],
})
def分配_区域(df):
members,counts=pd.np.unique(df.Member,return\u counts=True)
成员计数=dict(zip(成员计数))
面积={}
可用面积=列表(范围(长度(成员),0,-1))
面积_col=[]
对于df中的成员。成员:
如果成员在以下领域:
面积=面积[成员]
其他:
面积=可用面积。pop()
面积[成员]=面积
区域列附加(区域)
成员计数[成员]-=1
如果成员_计数[成员]==0:
可用面积。附加(面积)
可用面积。排序(反向=真)
df[“面积”]=面积
返回df
分配区域(df)
为什么C3是2?在第2Yeh段中,我将对此进行补充。因为C2
不再出现,C3
应该接管分配的值。这就好像C2
完成,而C3
正在同时接管。组合在这里行吗。在一组嵌套的字符串中<代码>C2,C3
为什么C3是2?在第2Yeh段中,我将对此进行补充。因为C2
不再出现,C3
应该接管分配的值。这就好像C2
完成,而C3
正在同时接管。组合在这里行吗。在一组嵌套的字符串中<代码>C2、C3
Period Member Area
0 1 C1 1
1 1 C2 2
2 1 C4 3
3 2 C1 1
4 2 C2 2
5 2 C4 3
6 3 C1 1
7 3 C3 2
8 3 C4 3
9 3 C5 4