我正在嘗試獲取列的每一行內的串列的第一個非空值Emails以寫入Email_final1然后獲取每一行內的串列的下一個值(Emails如果有的話),Emails_final2否則將Emails2值寫入Emails2_final如果不是空白并且不等于“電子郵件”,否則Emails_final2留空。最后,如果一個值 fromEmails 2被寫入Emails_final1然后 makeEmails_final2 None我嘗試了許多不同的方法來實作這一點無濟于事,這是我迄今為止所擁有的,包括偽代碼:
我當前的代碼:
df = pd.DataFrame({'Emails': [['[email protected]', '[email protected]', '[email protected]'],[None, '[email protected]'],[None,None,None]],
'Emails 2': ['[email protected]', '[email protected]','[email protected]'],
'num_specimen_seen': [10, 2,3]},
index=['falcon', 'dog','cat'])
df['Emails_final1'] = df['Emails'].explode().groupby(level=0).first()
#pseudo code
df['Emails_final2'] = df['Emails'].explode().groupby(level=0).next() #I know next doesn't exist but I want it to try to get the next value of 'Emails' before trying to get 'Emails 2 values.
期望的輸出:
Emails_final1 Emails_final2
falcon [email protected] [email protected]
falcon [email protected] [email protected]
falcon [email protected] None
任何有關如何解決此類問題的方向都將不勝感激。
uj5u.com熱心網友回復:
它看起來有點亂,但它有效。基本上,我們在填寫“Emails_final1”的第一步中保留一個布爾掩碼,并在第二步中使用它來填寫“Emails_final1”。
要填充第二列,想法是使用groupby nth來獲取第二個元素,如果它們與之前選擇的電子郵件不匹配;保留它(例如第一行),但如果它沒有從“電子郵件 2”列中選擇,除非它之前已經選擇過(例如在第三行中):
exp_g = df['Emails'].explode().groupby(level=0)
df['Emails_final1'] = exp_g.first()
msk = df['Emails_final1'].notna()
df['Emails_final1'] = df['Emails_final1'].fillna(df['Emails 2'])
df['Emails_final2'] = exp_g.nth(1)
df['Emails_final2'] = df['Emails_final2'].mask(lambda x: ((x == df['Emails_final1']) | x.isna()) & msk, df['Emails 2'])
相關欄目是:
Emails_final1 Emails_final2
falcon [email protected] [email protected]
dog [email protected] [email protected]
cat [email protected] None
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/445429.html
標籤:Python python-3.x 熊猫 数据框 熊猫-groupby
上一篇:ASP.NET CORE 專案搭建(2022 年 3 月版)
下一篇:python在元標記末尾添加/
