为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 lambda 应用于每个数据框行以便测试两个条件?

如何将 lambda 应用于每个数据框行以便测试两个条件?

HUWWW 2023-02-15 16:13:57
我有一个包含两列的数据集:在第一列中,是文件的完整目录路径。在第二列中,文件的最后修改日期。我试图计算每个上层文件夹(“狗”、“猫科动物”、“老鼠”、“食蚁兽”)中最后修改时间晚于 2004 年 6 月 23 日的文件数。最终,我想要这样的东西:这是我的数据集:import pandas as pddata = {'FullName': ["dog\cat\cow\rover.doc","feline\cat\cow\digger.doc","dog\cat\cow\whatamess.doc","mouse\cat\mouse\jude.doc","anteater\cat\mouse\sam.doc","dog\cat\owl\audrey.doc",], 'LastWriteTime': ['2003-01-02', '2004-01-02', '2005-01-02','2006-01-02','2007-01-02','2008-01-02']}df1 = pd.DataFrame(data)我可以计算上层文件夹在数据集中重复出现的次数:df2 = (df1['FullName'].apply(lambda x: x.split('\\')[0]).value_counts()我还可以计算日期大于“2004-06-23”的文件在数据集中重复出现的次数:df3 = df1['LastWriteTime'].apply(lambda x: pd.to_datetime((x),yearfirst=True) > pd.to_datetime('2004-06-23',yearfirst=True)).value_counts()我尝试将它们组合如下:df2 = (df1['FullName'].apply(lambda x: x.split('\\')[0]) & pd.to_datetime((x),yearfirst=True) > pd.to_datetime('2004-06-23',yearfirst=True)).value_counts()但我得到错误代码:x is not defined有谁知道如何组合它们?
查看完整描述

1 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

您只能使用表达式。请参阅 python文档。


只需将它括在括号中,python 解释器就会很高兴。


lambda x: (x.split('\\')[0]) & (pd.to_datetime(x, yearfirst=True) > pd.to_datetime('2004-06-23',yearfirst=True)))

但是,您正在将函数应用于相应的表“LastWriteTime”和“FullName”,函数更适合。创建多个评估函数并将其与相应的键存储在字典中,并传递给 aggregate()。


def check_date(x):

    return pd.to_datetime(x) > pd.to_datetime('2004-06-23', yearfirst=True)



def files_count(x):

    return x.split('\\')[0]



df1 = pd.DataFrame(data)


func_dict = {'FullName': files_count, 'LastWriteTime': check_date}


df4 = df1.aggregate(func_dict)  # applying multiple function to multiple columns

print(df4, end='\n'*2)


# use df[df['a']] & df[df['b']] for filtering.

df3_filtered = df4[df4['LastWriteTime']]  # filtering.

print(df3_filtered, end='\n'*2)


df2 = df3_filtered['FullName'].value_counts()  # counting.

print(df2)

结果:


   FullName  LastWriteTime

0       dog          False

1    feline          False

2       dog           True

3     mouse           True

4  anteater           True

5       dog           True


   FullName  LastWriteTime

2       dog           True

3     mouse           True

4  anteater           True

5       dog           True


dog         2

anteater    1

mouse       1

Name: FullName, dtype: int64


查看完整回答
反对 回复 2023-02-15
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号