首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在pandas DataFrame中,当某个值在另一列中实现时,如何编辑一列中的值?

在pandas DataFrame中,当某个值在另一列中实现时,如何编辑一列中的值?
EN

Stack Overflow用户
提问于 2020-06-04 23:46:11
回答 2查看 15关注 0票数 1

我有以下DataFrame,除了这里包含的列之外,还有几列:

代码语言:javascript
运行
复制
    Col2      Col3    Col4
0   3682   US91892      US
1   7568   US91234      US
2   3546     UKIPD      GB
3   7892     UKI43      GB
4   1243   US92345      US

为此,如果col4 = US,我只想获取col3的最后5位数,例如:

代码语言:javascript
运行
复制
    Col2      Col3    Col4
0   3682     91892      US
1   7568     91234      US
2   3546     UKIPD      GB
3   7892     UKI43      GB
4   1243     92345      US

为此,我尝试了:

代码语言:javascript
运行
复制
for a in df.index:
    if df["col4"][a] == "US":
        df["col3"][a] = df["col3"][a][-5:]

然而,它需要几个小时才能运行(数据集大约有170,000个数据点,其中有几个这样的数据集)。我想知道有没有更快更有效的方法来做这件事?

EN

回答 2

Stack Overflow用户

发布于 2020-06-04 23:53:03

另一种方法是使用布尔索引:

代码语言:javascript
运行
复制
df.loc[df.Col4=='US', 'Col3'] = df.Col3.str[-5:]

输出:

代码语言:javascript
运行
复制
   Col2   Col3 Col4
0  3682  91892   US
1  7568  91234   US
2  3546  UKIPD   GB
3  7892  UKI43   GB
4  1243  92345   US
票数 2
EN

Stack Overflow用户

发布于 2020-06-04 23:48:16

您可以尝试:

代码语言:javascript
运行
复制
df['Col3'] = df['Col3'].str[-5:].where(df['Col4'].eq('US'),df['Col3'])
#or df['Col3'] = np.where(df['Col4'].eq('US'),df['Col3'].str[-5:],df['Col3'])
print(df)

代码语言:javascript
运行
复制
   Col2   Col3 Col4
0  3682  91892   US
1  7568  91234   US
2  3546  UKIPD   GB
3  7892  UKI43   GB
4  1243  92345   US
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62198773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档