python - 根据条件编辑 DataFrame 的行值
问题描述
我有一个 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
我想根据and值将"DOC"
+ 1,2,3 等添加到列中。我应用的逻辑:STATUS
ID
ABCD_ID
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 的行,而不是更多。输出:
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
也许有更简单的方法来解决这个问题?任何建议将不胜感激
解决方案
一种完全不同的方法是在删除重复行的临时数据框的列中添加每个 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 2
推荐阅读
- codeigniter - codeigniter如何存储实时数据
- sql - 根据另一列的值设置列值
- python - Curve_fit 错误 - IndexError:只有整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组是有效索引
- kubernetes - 无法从普罗米修斯获取指标
- python - PySide:QFileSystemModel - 显示/显示根项目
- c++ - 从静态二进制文件中使用 dlopen 时 -rdynamic 不起作用
- css - 文本和背景颜色成表格
- qt - vlc-qt 是否能够获取 RAW 音频数据?
- python - Python:成本计算计算器输出
- python-3.x - 如何从 gensim Word2Vec 嵌入向量中嵌入句子?