根据其他列的条件填充空的熊猫列

时间:2019-08-15 18:35:28

标签: python pandas dataframe

假设我有以下玩具数据框:

# Import pandas library 
import pandas as pd 
# initialize list of lists 
data = [['tom', 10], ['nick', 15], ['juli', 14]] 
# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Name', 'Age']) 
# print dataframe. 
df

,然后创建一个空列,稍后再填充:

df['foo'] = df.apply(lambda _: '', axis=1)

我想根据其他两列的条件填充空白列。例如:

 if (df['Name']=='tom' and df['Age']==10):
     df['foo'] = 'x1'

我遇到以下错误:

  

系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

数据帧需要以不同的方式索引和访问:

df['foo'] = ''
df.loc[(df['Name'] == 'tom') & (df['Age'] == 10), 'foo'] = 'x1'

答案 1 :(得分:1)

df['foo'] = np.where((df['Name'] == 'tom') & (df['Age'] == 10), 'x1', '')

在我看来,使用np.where功能更简单。

答案 2 :(得分:0)

根据错误,在此处您将整个系列df ['Name']与'tom'进行比较,并与其他条件进行比较。您必须为每个值熊猫系列编写此条件。 为此,您可以使用Apply功能。

def new_column(df1):
    if (df1['Name']=='tom' and df1['Age']==10):
        df1['foo'] = 'x1'

df.apply(new_column)