亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

連接兩列.

連接兩列.

慕妹3146593 2023-09-12 16:50:41
我有兩個文本列 A 和 B。我想采用第一個非空字符串,或者如果 A 和 B 都有值,則采用 A 中的值。C 是我試圖創建的列:import pandas as pdcols = ['A','B']data = [['data','data'],        ['','data'],        ['',''],        ['data1','data2']]df = pd.DataFrame.from_records(data=data, columns=cols)      A      B0  data   data1         data2             3  data1  data2我的嘗試:df['C'] = df[cols].apply(lambda row: sorted([val if val else '' for val in row], reverse=True)[0], axis=1) #Reverse sort to avoid picking an empty string      A      B      C0  data   data      data1         data      data2             3  data1  data2     data2 #I want data1 here預期輸出:      A      B      C0  data   data      data1         data      data2             3  data1  data2     data1我想我想要 pandas 相當于 SQL 合并。
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

您還可以使用numpy.where

In [1022]: import numpy as np

In [1023]: df['C'] = np.where(df['A'].eq(''), df['B'], df['A'])


In [1024]: df

Out[1024]:?

? ? ? ?A? ? ? B? ? ? C

0? ?data? ?data? ?data

1? ? ? ? ? data? ?data

2? ? ? ? ? ? ? ? ? ? ?

3? data1? data2? data1


查看完整回答
反對 回復 2023-09-12
?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

讓我們嘗試一下idxmax+ lookup:


df['C'] = df.lookup(df.index, df.ne('').idxmax(1))

或者您可以使用Series.where:


df['C'] = df['A'].where(lambda x: x.ne(''), df['B'])

       A      B      C

0   data   data   data

1          data   data

2                     

3  data1  data2  data1


查看完整回答
反對 回復 2023-09-12
  • 2 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號