Python 通过最后一个非NAN值的数据帧行的条件循环

Python 通过最后一个非NAN值的数据帧行的条件循环,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我是python新手:) 我有以下dataframe,有些列没有标题: 我试着为每个名字做一些基本的条件:比如晚餐上印着“晚上好” 到目前为止,我所做的是为每行查找最后一个非NAN值: df.ffill(axis=1).iloc[:, -1] 结果: 0 dinner 1 lunch 2 dinner 3 lunch 4 breakfast 5 lunch 6 lunch 7 dinner Na

我是python新手:)

我有以下dataframe,有些列没有标题:

我试着为每个名字做一些基本的条件:比如晚餐上印着“晚上好”

到目前为止,我所做的是为每行查找最后一个非NAN值:

df.ffill(axis=1).iloc[:, -1]
结果:

0       dinner
1        lunch
2       dinner
3        lunch
4    breakfast
5        lunch
6        lunch
7       dinner
Name: Unnamed: 11, dtype: object
然后尝试执行以下条件:

for index, column in df.iterrows():
        if df.ffill(axis=1).iloc[:, -1] == "dinner":
            print ("Good evening",column['Name'])
我得到了这个错误:

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
然后我试着:

for i in df.ffill(axis=1).iloc[:, -1]:
    if i == "dinner":
        print ("Good evening",column['Name'])
但是这种情况并不像预期的那样有效

Good evening Sara
Good evening Sara
Good evening Sara
感谢帮助

也是一个选项:

m = df.apply(lambda s: s[s.last_valid_index()], axis=1).eq('dinner')

for name in df.loc[m, 'Name']:
    print('Good evening', name)
晚上好,莎拉 晚上好,雷蒙 晚上好,阿尔伯
或创建一个新系列:

m = df.apply(lambda s: s[s.last_valid_index()], axis=1).eq('dinner')

print('Good evening ' + df.loc[m, 'Name'])
0晚上好Sara
晚上好,雷蒙
晚上好,阿尔伯
名称:名称,数据类型:对象

您能创建生成输入数据框的代码吗?顺便说一句,数据框对于您的任务来说似乎不是一个好的数据结构。简单的词典会更简单、更直观。相关: