如果满足两个条件,则将数据框架中的特定列填充到现有列



如果'Name'和'Age'的条件为真,我试图用'Name'列中的值填充'Selected'列。否则,保持列为空字符串。然而,程序似乎没有读取if条件,因为它跳到'else'里面的结果。

import pandas as pd
data = {'Name': ['Tom', 'Joseph', 'Krish', 'John'],
'Age': ['20', '35', '43', '50'],
'Selected': ' '}
df = pd.DataFrame(data)
df['Selected'] = df['Selected'].apply(lambda x: df['Name'] if ((df['Name']).any() == 'Tom') &
(df['Age'].any() < 25) else ' ')
print(df)
下面是上面代码的输出:
Name Age Selected
0     Tom  20         
1  Joseph  35         
2   Krish  43         
3    John  50  

,而我希望看到Tom在同一索引下的Selected列中,因为Tom同时满足了'Name'和'Age'的条件。——比;汤姆& lt;25

任何帮助都是感激的,谢谢!

使用np.where功能:

condition = (df.Name == 'Tom') & (df.Age.lt(25))
df['col'] = np.where(condition, df.Name, df.Selected)
print(df)
Name    Age     Selected    col
0   Tom     20                  Tom
1   Joseph  35      
2   Krish   43      
3   John    50      

使用Apply方法:

df.apply(lambda row: row.Name if ((row.Name == 'Tom')&
(row.Age < 25)) else row.Selected, axis=1)

当使用lambda函数与apply时,您可以将列名作为变量传递,如果我理解正确并且您实际上正在尝试检查每行的条件:

df['Selected'] = df.apply(lambda x: x.Name if (x.Name == 'Tom') & (int(x.Age) < 25) else '', axis=1)

这将返回:

Name Age Selected
0     Tom  20      Tom
1  Joseph  35
2   Krish  43
3    John  50

当前的解决方案是在每一行的条件中使用整列。

最新更新