大家好,我是Python進(jìn)階者。
昨天在Python最強王者交流群【魚(yú)魚(yú)魚(yú)也不】問(wèn)了一個(gè)Pandas處理的問(wèn)題,下圖是討論截圖:

下圖是他的原始數據:

其實(shí)一開(kāi)始是有點(diǎn)難以理解的。其實(shí)這個(gè)就是想判斷兩列的情況,用一列值填充另一列值。
這里【貓藥師Kelly】給了一個(gè)解答,如下所示:

后來(lái)【鄭煜哲·Xiaopang】也給了一個(gè)代碼,如下所示:
df["col1"].fillna(df[col2])
看上去的確可行,完美地解決了粉絲的問(wèn)題!

不知道為啥他后面又拿出來(lái)問(wèn)了,問(wèn)他原因也沒(méi)說(shuō)具體,可能是自己不會(huì )實(shí)現吧(盲猜)。細節方面就不說(shuō)了,直接放上【月神】的解法。

import pandas as pd
file = ""
output_filename = ""
data1 = pd.read_excel(file, sheet_name='Sheet1', dtype={'eventdate': 'datetime64[ns]', 'u1': 'datetime64[ns]'})
d2 = pd.read_excel(file, sheet_name='Sheet2', dtype={'f1': 'datetime64[ns]', 'f2': 'datetime64[ns]'})
def match_description(s, df, compare_col, value_col):
"""判斷df[compare_col]中是否有s,如果有,則返回df[value_col]的第一個(gè)值,否則返回空"""
compare_data = df[df[compare_col] == s].copy()
if compare_data.empty:
return None
return compare_data[value_col].values[0]
# apply方法第一個(gè).取時(shí)間是時(shí)分都相等的對應值
d2['gbvibforwardrms'] = d2['f1'].apply(match_description, args=(data1, 'u1', 'gbvibforwardrms'))
# apply方法第二個(gè).取是都是當天時(shí)間對應值
d2['gbvibforwardrms1'] = d2['f2'].apply(match_description, args=(data1, 'eventdate', 'gbvibforwardrms'))
# 第一個(gè)apply值的缺失值,補第二個(gè)apply值, 兩列都為空用空字符串填充
d2['c'] = d2['gbvibforwardrms'].fillna(d2['gbvibforwardrms1']).fillna('')
# 數據保存
d2['c'].to_excel(output_filename, sheet_name='data3')
一把過(guò),太強了!

最后再拓展一些,【~上善居士~ 郭百川】分享了幾個(gè)常用的數據分析姿勢,如下圖所示:


https://github.com/pandas-dev/pandas/tree/master/doc/cheatsheet
大家好,我是Python進(jìn)階者。這篇文章主要盤(pán)點(diǎn)了一個(gè)Pandas處理的問(wèn)題,文中針對該問(wèn)題給出了具體的解析和代碼實(shí)現,幫助粉絲順利解決了問(wèn)題。
最后感謝粉絲【魚(yú)魚(yú)魚(yú)也不】提問(wèn),感謝【貓藥師Kelly】、【哈佛在等我呢~】、【鄭煜哲·Xiaopang】、【~上善居士~ *郭百川】、【月神】、【瑜亮老師】給出的思路和代碼解析,感謝【封代春】、【冫馬讠成】、【dcpeng】、【此類(lèi)生物】、【Chloe】、【郎愛(ài)君】等人參與學(xué)習交流。
贈書(shū)規則
如果喜歡本文
聯(lián)系客服