python - 用从数据框中另一列的最大值计算的值替换字符串
问题描述
我有一个数据框,其 ID 列具有 dtype 对象(包含 INT 和 STR),所以我试图用np.where
下一个最高数字依次替换它们中的每一个......但是由于下面的示例中的某些原因,它只是替换两个字符串之一,我不知道为什么?
df = pd.DataFrame({'IDstr':['480610_ABC_087', '78910_ABC_087','4806105017087','414149'],
'IDint':[ 0, 0, 4806105017087, 414149]})
print (df)
unique_str_IDs = df['IDstr'][df['IDstr'].str.contains("ABC", na=False)].unique()
for i in range(len(unique_str_IDs)):
df['SKUintTEST']=np.where(df['IDstr'] == unique_str_IDs[i].strip(),
df['SKUint_y'].max()+i+1, df['SKUint_y'])
有没有人有任何想法?
解决方案
您可以使用map
为每个唯一 ID 增量创建的字典,然后fillna
使用未映射行的原始值:
df = pd.DataFrame({'IDstr':['480610_ABC_087', '78910_ABC_087','4806105017087','414149'],
'IDint':[ 0, 0, 4806105017087, 414149],
'SKUint_y': range(10,14)})
unique_str_IDs = df.loc[df['IDstr'].str.contains("ABC", na=False), 'IDstr'].unique()
df['SKUintTEST'] = df['IDstr'].map({idx:i for i, idx in enumerate(unique_str_IDs, df.SKUint_y.max()+1)})\
.fillna(df.SKUint_y)
print (df)
IDstr IDint SKUint_y SKUintTEST
0 480610_ABC_087 0 10 14.0
1 78910_ABC_087 0 11 15.0
2 4806105017087 4806105017087 12 12.0
3 414149 414149 13 13.0
推荐阅读
- java - Groovy:通过变量调用LinkedHashMap的key
- python - Google Cloud OAuth 同意屏幕未反映(内部)应用范围的更改
- xslt - XSL + XPath 访问另一个分支中的另一个元素
- javascript - 在 Leaflet 中的 .setContent() 中使用视频 HTML 标记内的 JavaScript 值
- android - 如何在Android上建立房间数据库
- html - 防止同时播放多个 youtube iFrames 视频
- php - 学说迁移与数据
- android - 取消 ApplePay 和 GooglePay 对话框
- php - 安装 JSON Web 令牌和作曲家后,我的 __autoload 功能不起作用
- r - R:删除变量(列)中的观察值(行)