【问题标题】:Only show non-repeated characters in a column in a new column (pandas)仅在新列中显示非重复字符(熊猫)
【发布时间】:2019-01-27 23:07:18
【问题描述】:

我在 df 中有一个列,其中包含诸如 ABABAB 之类的字符串,我想在此类 df 中创建一个新列,该列将仅带来此类字符串的非重复字符,在上面的示例中,只是 AB。

我已经尝试过 ''.join() 但这并不适用于我收到一条错误消息,指出需要一个字符串。

说明性的期望结果:

  Column_1     Column_2
   ABABAB         AB
   KGKGKG         KG
   ACACAC         AC
   PCTPCTPCT      PCT

请记住,在某些情况下,唯一字符不止两个

提前感谢您!

【问题讨论】:

标签: python pandas


【解决方案1】:

看看这是不是你想要的:

df["Column_2"] = df["Column_1"].apply(lambda x: "".join(set(list(x))))
df
    Column_1    Column_2
0   ABABAB  AB
1   KGKGKG  KG
2   ACACAC  AC
3   PCTPCTPCT   PTC

【讨论】:

  • 也不适用于'ABBABB':不保证保持字母顺序,因为集合未排序并且可能为 PCAPCAPCA 返回 ACP - 也不适用于没有重复的 'ABCDEFE' /跨度>
  • 'PCT' 都是重复字符。它们在'PCTPCTPCT' 中出现了三次——寻找的是最短的不重复的“序列”——你的代码将从序列中删除重复的字母——因此不适用于'ABBABBABB',它可能应该返回'ABB' 但是将给出'AB''BA'
【解决方案2】:

如果您不关心顺序,您可以为此使用集合:它们只保留可迭代的唯一项(例如字符串)。然后将集合连接在一起,使其成为一个字符串:

df['Column_1'].apply(lambda x: ''.join(set(x)))
#0    BA
#1    GK
#2    CA
#3    CTP

【讨论】:

  • 也不适用于'ABBABB':不保证字母按顺序排列,因为集合未排序,并且可能为 PCAPCAPCA 返回 ACP - 也不适用于没有重复的'ABCDEFE' /跨度>
  • 你能澄清一下吗?它按预期输出'AB',对吗?
  • 在我回复后,您的评论似乎发生了变化。我已经在我的回答中写道,它只有在你不关心订单的情况下才有效(他没有指定应该很重要)。他说他想要不重复的字符,我将其解释为独特的字符,实际上这就是返回的内容,对吗? @PatrickArtner
  • 我要求澄清。我以不同的方式阅读了这个问题 - 在我得到澄清之前,我会编辑我的 dv
猜你喜欢
  • 2020-04-09
  • 2022-01-16
  • 2019-04-11
  • 2017-01-14
  • 1970-01-01
  • 2018-11-06
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多