当前位置: 首页 > 知识库问答 >
问题:

当我们想要在两列之间连接字符串时,如何设置sep的条件?

昝阳嘉
2023-03-14

我想知道是否有一种方法可以在我提到的数据帧的两列中的字符串之间连接:在pandas dataframe中组合两列文本,但似乎我找不到满足我需要的解决方案。假设我有一个包含两列的数据框:第一列和第二列。所以第三列应该是这样的:

df['Third'] = df.First.astype(str).str.cat(df.Second.astype(str), sep=',')

通常,当这两列是string时,连接效果很好,但在我的例子中,第一列和第二列有时可以包含NaN

因此,有没有一种方法可以在sep上设置条件,以确定是否需要在case中输入,例如:如果df['First']='First'和df['Second']=NaN,那么df['Third']='First'结尾不带a。如果df['first']=NaN,df['Second']=Second',则df['Third']=Second',在字符串开头,不带a。

我怎样才能做到这一点?任何帮助都将不胜感激。非常感谢。

共有2个答案

田远
2023-03-14

lambda和应用程序变得混乱,所以为了清楚起见,您可能需要抽象出一个函数

def my_join(a,b):
    if a != NaN and b != NaN: return a + ',' + b
    elif a == NaN return b
    else return a

df['Third'] = df.apply(lambda x: my_join(x.First, x.Second))
李胤
2023-03-14

不知道这有多有效,或者是否有更好的方法。

如果数据框中只有firstsecond列:

df["third"] = df.apply(
    lambda row: ",".join([x for x in row if not pd.isna(x)]),
    axis=1
)

如果还有其他列:

df["third"] = df.apply(
    lambda row: ",".join([x for x in row[["first", "second"]] if not pd.isna(x)]),
    axis=1
)
 类似资料:
  • 我正在尝试用Java连接字符串。为什么这不起作用?

  • 问题内容: 我正在尝试连接Java中的字符串。为什么这不起作用? 问题答案: 你可以使用运算符来连接字符串: 被隐式转换为。

  • 我已经成功地建立了一个混合连接,将我的Azure web应用程序连接到本地SQL-server。我添加了主要的本地网关连接字符串,它与命令一起列出:< code > Get-hybrid connection 。 但是它并不总是保持连接。现在我想知道如何处理辅助连接字符串。如果我尝试使用添加它,我会得到这个错误: Add-HybridConnection : Exist Configuration

  • 问题内容: 我有两次,开始时间和停止时间,格式为10:33:26(HH:MM:SS)。我需要两次之间的区别。我一直在浏览Python文档并在线搜索,我想这可能与datetime和/或time模块有关。我无法使其正常工作,并且仅在涉及约会时才继续寻找方法。 最终,我需要计算多个持续时间的平均值。我得到了工作上的时差,并将它们存储在列表中。我现在需要计算平均值。我正在使用正则表达式解析原始时间,然后进

  • 如何实现返回两个字符之间的字符列表的函数? PS:我知道如何做类似的事情有多种答案,但所有这些答案都只适用于获得第一个实例,而不是所有事件。

  • 我知道这可能是非常基本的,也可能是非常直接的,但我无法清楚地理解在这种情况下会发生什么,所以,就这样吧。 在以下代码中: 我知道str1和str2将在字符串常量池中分别创建一个对象“Hello”和“World”。而对于str3,将在字符串常量池外部创建一个新对象,该对象指向在字符串常量池内部创建的“HelloWorld”。 我的问题是,如果我concat 2个或更多字符串(使用“”或concat(