我有一个DataFrame,并希望根据条件编辑行的值。DataFrame如下所示:
ID ABCD_ID STATUS
83590 IX1655 APPROVAL_A
83590 IX1655 FINAL-APPROVAL_A
82042 IX1656 APPROVAL_A
82042 IX1656 FINAL-APPROVAL
77848 IX1666 APPROVAL_M
77848 IX1666 FINAL-APPROVAL_A
77848 IX1667 APPROVAL_A
77848 IX1667 FINAL-APPROVAL_A我想根据ID和ABCD_ID的值将"DOC" + 1,2,3等添加到列STATUS。我应用的逻辑是:
a = 1
for i in range (len(df)-1):
if df.ID.iloc[i] == df.ID.iloc[i+1] and df.ABCD_ID.iloc[i]== df.ABCD_ID.iloc[i+1]:
df.STATUS.iloc[i] = 'DOC_'+ str(a) + '_'+df.STATUS.iloc[i]
df.STATUS.iloc[i+1] = 'DOC_'+ str(a) + '_'+df.STATUS.iloc[i+1]
elif df.ID.iloc[i] == df.ID.iloc[i+1] and df.ABCD_ID.iloc[i]!= df.ABCD_ID.iloc[i+1]:
df.STATUS.iloc[i+1] = 'DOC_'+ str(a+1) + '_'+df.STATUS.iloc[i+1]该逻辑仅适用于具有两个相同IDS的行,而不适用于更多IDS。输出:
ID ABCD_ID STATUS
0 83590 IX1655 DOC_1_APPROVAL_A
1 83590 IX1655 DOC_1_FINAL-APPROVAL_A
2 82042 IX1656 DOC_1_APPROVAL_A
3 82042 IX1656 DOC_1_FINAL-APPROVAL
4 77848 IX1666 DOC_1_APPROVAL_M
5 77848 IX1666 DOC_1_FINAL-APPROVAL_A
6 77848 IX1667 DOC_1_DOC_2_APPROVAL_A
7 77848 IX1667 DOC_1_FINAL-APPROVAL_A我希望输出如下所示:
ID ABCD_ID STATUS
0 83590 IX1655 DOC_1_APPROVAL_A
1 83590 IX1655 DOC_1_FINAL-APPROVAL_A
2 82042 IX1656 DOC_1_APPROVAL_A
3 82042 IX1656 DOC_1_FINAL-APPROVAL
4 77848 IX1666 DOC_1_APPROVAL_M
5 77848 IX1666 DOC_1_FINAL-APPROVAL_A
6 77848 IX1667 DOC_2_APPROVAL_A
7 77848 IX1667 DOC_2_FINAL-APPROVAL_A也许有更简单的方法来解决这个问题?如有任何建议,我们将不胜感激
发布于 2021-02-03 13:03:22
一种完全不同的方法是向删除了重复行的临时数据框的列添加每个ID的累积计数。将其与原始数据框组合以填充缺少的行。将它连接到列中,就完成了。如果你有大量的数据,这比循环处理更有优势。
tmp = df[['ID','ABCD_ID']].drop_duplicates()
flg = tmp.groupby(['ID']).cumcount()+1
df = pd.concat([df, flg], axis=1)
df[0].fillna(method='ffill', inplace=True)
df[0] = df[0].astype(int)
df['STATUS'] = 'DOC_' + df[0].astype(str) + '_' + df['STATUS']
df
ID ABCD_ID STATUS 0
0 83590 IX1655 DOC_1_APPROVAL_A 1
1 83590 IX1655 DOC_1_FINAL-APPROVAL_A 1
2 82042 IX1656 DOC_1_APPROVAL_A 1
3 82042 IX1656 DOC_1_FINAL-APPROVAL 1
4 77848 IX1666 DOC_1_APPROVAL_M 1
5 77848 IX1666 DOC_1_FINAL-APPROVAL_A 1
6 77848 IX1667 DOC_2_APPROVAL_A 2
7 77848 IX1667 DOC_2_FINAL-APPROVAL_A 2https://stackoverflow.com/questions/66017521
复制相似问题