Pandas DataFrame:使用列值在另一列中切片字符串
Posted
技术标签:
【中文标题】Pandas DataFrame:使用列值在另一列中切片字符串【英文标题】:Pandas DataFrame: use column value to slice string in another column 【发布时间】:2018-05-03 21:46:12 【问题描述】:我有一个如下的熊猫数据框:
col1 col2 col3
0 1 3 ABCDEFG
1 1 5 HIJKLMNO
2 1 2 PQRSTUV
我想添加另一列,它应该是col3
的子字符串,从col1
中指示的位置到col2
中指示的位置。像col3[(col1-1):(col2-1)]
这样的东西,应该会导致:
col1 col2 col3 new_col
0 1 3 ABCDEFG ABC
1 1 5 HIJKLMNO HIJK
2 1 2 PQRSTUV PQ
我尝试了以下方法:
my_df['new_col'] = my_df.col3.str.slice(my_df['col1']-1, my_df['col2']-1)
和
my_df['new_col'] = data['col3'].str[(my_df['col1']-1):(my_df['col2']-1)]
它们都产生NaN
的列,而如果我插入两个数值(即data['col3'].str[1:3]
),它工作正常。我检查了类型是正确的(int64、int64 和对象)。此外,在这样的上下文之外(例如使用 for 循环)我可以完成工作,但我更喜欢利用 DataFrame 的单行。我做错了什么?
【问题讨论】:
【参考方案1】:使用apply
,因为每一行都必须单独处理:
my_df['new_col'] = my_df.apply(lambda x: x['col3'][x['col1']-1:x['col2']], 1)
print (my_df)
col1 col2 col3 new_col
0 1 3 ABCDEFG ABC
1 1 5 HIJKLMNO HIJKL
2 1 2 PQRSTUV PQ
【讨论】:
以上是关于Pandas DataFrame:使用列值在另一列中切片字符串的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas:按一列分组,仅在另一列中聚合,但取相应数据