【发布时间】:2019-12-26 09:36:58
【问题描述】:
我正在尝试根据其他列的行中的值更改来分配新列中的值。请参考给出的数据集。
ID1- 基于 diff 列,当值不等于 1 时,它应该将新 ID 分配给上一行的 ID 加一。
ID2-当ID1内Region发生变化时分配ID
ID3- 分配 ID1 和 ID2 内的 ID
当 Indv 列更改为新值时,上述三个 ID 都应从 1 开始。
import pandas as pd
# intialise data of lists.
data={'Indv':[1,1,1,1,1,1,1,1,1,1,1,2,2,2],
'Region':['A','A','A','A','B','B','B','C','C','C','D','A','A','C'],
'diff':[ 1,1,10,1,1,1,1,10,1,1,1,-11,1,1],
}
#CreateDataFrame
df=pd.DataFrame(data)
#creating ID1
df['ID1']=1
#Code only for ID1
for i in range(len(df)):
j=i+1
if(df['Indv'][i]!=df['Indv'][j]):
df['session_ID'][j]=1
if df['diff'][j]==1:
df['ID1'][j]=df['ID1'][i]
else:
df['ID1'][j]=df['ID1'][i]+1
break;
具有预期结果的数据集 - 需要生成 ID1、ID2 和 ID3 列。
Indv, Region, diff, ID1, ID2, ID3
1, A, 1, 1, 1, 1
1, A, 1, 1, 1, 2
1, A, 10, 2, 1, 1
1, A, 1, 2, 1, 2
1, B, 1, 2, 2, 1
1, B, 1, 2, 2, 2
1, B, 1, 2, 2, 3
1, C, 10, 3, 1, 1
1, C, 1, 3, 1, 2
1, C, 1, 3, 1, 3
1, D, 1, 3, 2, 1
2, A, -11, 1, 1, 1
2, A, 1, 1, 1, 2
2, C, 1, 1, 2, 1
【问题讨论】:
-
你能创建minimal, complete, and verifiable example吗?因为在输入数据中缺少
ID,并且在输出中也只更改了ID2(如果输入也是ID1、ID2、ID3)。 -
我对代码做了一些改动,我的输入数据集只有三列,个人(Indv)、地区(Region)和差异(diff)。我正在尝试生成 ID1、ID2 和 ID3 列。有列基于个人和地区的变化。
标签: python pandas dataframe lambda conditional-statements