gpt4 book ai didi

python - 根据另一列值修改数据框列

转载 作者:太空宇宙 更新时间:2023-11-04 04:19:20 25 4
gpt4 key购买 nike

我有一个包含两列的数据框,我想根据另一列的值修改一列。

例子

unit        name
feet abcd_feet
celcius abcd_celcius
yard bcde_yard
yard bcde

如果单位是 feetyard 并且名称以它结尾,那么我想将它从列中删除。

unit        name
feet abcd
celcius abcd_celcius
yard bcde
yard bcde

最佳答案

有两种可能的方法可以解决您的问题:

第一种方法,速度更快,因为 pandas 是基于列的:

UNITS_TO_REMOVE = {'feet', 'yard'}

df['value_'], df['unit_'] = df['name'].str.split('_').str
values_to_clean = (df['unit_'].isin(UNITS_TO_REMOVE)) & (df['unit_'] == df['unit'])
df.loc[values_to_clean, 'name'] = df.loc[values_to_clean, 'value_']
df.drop(columns=['unit_', 'value_'], inplace=True)

这是结果,

    unit    name
0 feet abcd
1 celcius abcd_celcius
2 yard bcde
3 yard bcde

性能:每个循环 20 毫秒 ± 401 微秒(7 次运行的平均值 ± 标准偏差,每次 100 次循环)(在 (4000, 2) 数据帧上)


第二种方法,使用应用(有时是唯一可用的解决方案):

UNITS_TO_REMOVE = {'feet', 'yard'}

def remove_unit(unit, value):
if unit not in UNITS_TO_REMOVE or '_' not in value:
return value
else:
row_value, row_unit = value.split('_')
if row_unit == unit:
return row_value
else:
return value

df['name'] = df.apply(lambda row: remove_unit(row['unit'], row['name']), axis=1)

输出:


unit name
0 feet abcd
1 celcius abcd_celcius
2 yard bcde
3 yard bcde

性能:每次循环 152 毫秒 ± 3.95 毫秒(7 次运行的平均值 ± 标准偏差,每次 10 次循环)

关于python - 根据另一列值修改数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54796707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com