今
日
鸡
汤
寂寂竟何待,朝朝空自归。
大家好,我是Python进阶者。
一、前言
昨天在Python最强王者交流群【鱼鱼鱼也不】问了一个Pandas
处理的问题,下图是讨论截图:
下图是他的原始数据:
其实一开始是有点难以理解的。其实这个就是想判断两列的情况,用一列值填充另一列值。
二、实现过程
这里【猫药师Kelly】给了一个解答,如下所示:
后来【郑煜哲·Xiaopang】也给了一个代码,如下所示:
df["col1"].fillna(df[col2])
看上去的确可行,完美地解决了粉丝的问题!
不知道为啥他后面又拿出来问了,问他原因也没说具体,可能是自己不会实现吧(盲猜)。细节方面就不说了,直接放上【月神】的解法。
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]的第一个值,否则返回空"""
compare_data = df[df[compare_col] == s].copy()
if compare_data.empty:
return None
return compare_data[value_col].values[0]
# apply方法第一个.取时间是时分都相等的对应值
d2['gbvibforwardrms'] = d2['f1'].apply(match_description, args=(data1, 'u1', 'gbvibforwardrms'))
# apply方法第二个.取是都是当天时间对应值
d2['gbvibforwardrms1'] = d2['f2'].apply(match_description, args=(data1, 'eventdate', 'gbvibforwardrms'))
# 第一个apply值的缺失值,补第二个apply值, 两列都为空用空字符串填充
d2['c'] = d2['gbvibforwardrms'].fillna(d2['gbvibforwardrms1']).fillna('')
# 数据保存
d2['c'].to_excel(output_filename, sheet_name='data3')
一把过,太强了!
最后再拓展一些,【~上善居士~ 郭百川】分享了几个常用的数据分析姿势,如下图所示:
还有一个,如下图所示:
速查表连接如下:
https://github.com/pandas-dev/pandas/tree/master/doc/cheatsheet
三、总结
大家好,我是Python进阶者。这篇文章主要盘点了一个Pandas
处理的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。