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:使用列值在另一列中切片字符串的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 计算一个列值在另一列中的出现

Pandas:如果条件[重复],则从另一列更新列值

Python Pandas:按一列分组,仅在另一列中聚合,但取相应数据

Pandas - 在两列中查找具有匹配值的行并在另一列中相乘

pandas 判断某一列数据是不是在另一列中

Pandas:根据字符串的一部分是不是在另一列中的任何位置创建新列