簡體   English   中英

從其他 2 列的值創建新的 dataframe 列

[英]Create new dataframe column from the values of 2 other columns

我的數據框中有 2 列。 在任何一個實例(行)中,至少一個列中有一個字符串值,另一列可能有 NoneType 或另一個字符串。

我想創建第三列,在其中一列是 NoneType 的情況下,將采用字符串的值。 在兩者都是字符串的情況下,將采用兩者的連接。

我怎樣才能做到這一點?

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

系列.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)

Output

       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)

Output

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM