假设我有以下玩具数据框:
# 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()。
我做错了什么?
答案 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)