python - 如何通过操作另一列来创建新列?熊猫
问题描述
我正在尝试根据不同的标准创建一个新列。我想根据列的起始字符向字符串添加字符。数据示例:
RH~111~header~120~~~~~~~ball
RL~111~detailed~12~~~~~hat
RA~111~account~13~~~~~~~~~car
我想改变那些以 RH 和 RL 开头的,而不是那些以 RA 开头的。所以我想看起来像:
RH~111~header~120~~1~~~~~ball
RL~111~detailed~12~~cancel~~~ball
RA~111~account~12~~~~~~~~~ball
我曾尝试使用 str split,但它似乎并没有真正拆分字符串
(np.where(~df['1'].str.startswith('RH'),
df['1'].str.split('~').str[5],
df['1']))
这是引用正确的列,但没有将其拆分到我认为的位置,并且似乎无法比这更进一步。我觉得我并没有真正以正确的方式去做这件事。
解决方案
定义一个函数来替换arr列表中的No pos元素:
def repl(arr, pos):
arr[pos] = '1' if arr[0] == 'RH' else 'cancel'
return '~'.join(arr)
然后执行替换:
df[0] = df[0].mask(df[0].str.match('^R[HL]'),
df[0].str.split('~').apply(repl, pos=5))
细节:
str.match
规定只替换适当的元素。df[0].str.split('~')
将字符串列拆分为列表列(由拆分每个字符串产生)。apply(repl, pos=5)
计算要替代的值。
我假设你有一个单列的 DataFrame,所以它的列名是0(一个整数),而不是'1'(一个字符串)。如果不是这种情况,请更改上面代码中的列名。
推荐阅读
- highcharts - 在 R 中使用 hctreemap2 创建具有不同颜色的 Treemap
- vb.net - 是否可以等待调用任务?
- ios - 使用 aws-sdk-ios 设置 aws-lex 请求属性
- c# - 初始化字符串的格式不符合从索引 0 开始的规范,connectionString 中没有任何拼写错误
- awk - Edit awk command to ignore specific line pattern
- sql-server - T-SQL:我正在尝试获取一列的最新行以及另一列的总和
- r - 向绘图添加垂直线时 plot.xts 的奇怪行为
- html - Chrome for Mobile 在背景颜色为 #505050 的元素上显示奇怪的像素,如网格
- ios - 如何在不同视图之间共享从 Firebase 存储下载的图像?
- python - 使用 cloudwatch api get_metric_data 获取 sagemaker 端点调用指标