我有以下DataFrame,除了这里包含的列之外,还有几列:
    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位数,例如:
    Col2      Col3    Col4
0   3682     91892      US
1   7568     91234      US
2   3546     UKIPD      GB
3   7892     UKI43      GB
4   1243     92345      US为此,我尝试了:
for a in df.index:
    if df["col4"][a] == "US":
        df["col3"][a] = df["col3"][a][-5:]然而,它需要几个小时才能运行(数据集大约有170,000个数据点,其中有几个这样的数据集)。我想知道有没有更快更有效的方法来做这件事?
发布于 2020-06-04 23:53:03
另一种方法是使用布尔索引:
df.loc[df.Col4=='US', 'Col3'] = df.Col3.str[-5:]输出:
   Col2   Col3 Col4
0  3682  91892   US
1  7568  91234   US
2  3546  UKIPD   GB
3  7892  UKI43   GB
4  1243  92345   US发布于 2020-06-04 23:48:16
您可以尝试:
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)   Col2   Col3 Col4
0  3682  91892   US
1  7568  91234   US
2  3546  UKIPD   GB
3  7892  UKI43   GB
4  1243  92345   UShttps://stackoverflow.com/questions/62198773
复制相似问题