从其他两列的值创建新的dataframe列

2024-04-26 18:34:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据框中有两列。在任何一个实例(行)中,至少有一列包含字符串值,另一列中可能包含NoneType或其他字符串

我想创建第三列,在其中一列为非类型的情况下,它将接受字符串的值。在两者都是字符串的情况下,将采用两者的串联

我该怎么做

  column1  column2         column3
0   hello     None           hello
1    None  goodbye         goodbye
2   hello  goodbye  hello, goodbye

Tags: 数据实例字符串none类型hello情况column1
2条回答

Series.str.cat

使用na_rep='',这样带缺失值的联接不会导致整行的NaN。然后strip由于缺少数据而连接的任何多余分隔符(假设分隔符字符也不会开始或结束任何单词)

import pandas as pd
df = pd.DataFrame({'column1': ['hello', None, 'hello'],
                   'column2': [None, 'goodbye', 'goodbye']})

sep = ', '
df['column3'] = (df['column1'].str.cat(df['column2'], sep=sep, na_rep='')
                   .str.strip(sep))

print(df)
  column1  column2         column3
0   hello     None           hello
1    None  goodbye         goodbye
2   hello  goodbye  hello, goodbye

有很多列,中间可能有缺失数据的条带,上面的方法不能去除多余的分隔符。相反,您可以沿行使用慢速lambda。我们在删除空值后合并所有值:

df['column3'] = df.apply(lambda row: ', '.join(row.dropna()), axis=1)

解决方案

您可以用空字符串替换所有的NaN,然后连接列(A和B)以创建列C

df2 = df.fillna('')
df['C'] = df2.A.str.strip() + df2.B.str.strip(); #del df2;
print(df)

输出

       A     B    C=A+B
0      1     3       13
1      2  None        2
2    dog   dog   dogdog
3   None  None         
4  snake    20  snake20
5    cat  None      cat

虚拟数据

d = {
    'A': ['1', '2', 'dog', None, 'snake', 'cat'], 
    'B': ['3', None, 'dog', None, '20', None]
}
df = pd.DataFrame(d)
print(df)

输出

       A     B
0      1     3
1      2  None
2    dog   dog
3   None  None
4  snake    20
5    cat  None

相关问题 更多 >