Python 将值放入dataframe列中

Python 将值放入dataframe列中,python,pandas,dataframe,Python,Pandas,Dataframe,好的,我用一个新的例子编辑了这个问题 我无法在数据框中填充新列df['color'] #我用了一个答案的例子: d = {"symbol":["Heart", "Heart", "Diamond", "Spade"], "symbol2":["Heart","Diamond", "Spade", "Spade

好的,我用一个新的例子编辑了这个问题

我无法在数据框中填充新列
df['color']

#我用了一个答案的例子:

d = {"symbol":["Heart", "Heart", "Diamond", "Spade"], "symbol2":["Heart","Diamond", "Spade", "Spade"]}`

df_s = pd.DataFrame(d)


df_s['color'] = df_s['symbol'].map(lambda x: 'Correct' if x == df_s['symbol2'] else 'Wrong')
有了这段代码,我想创建一个名为“color”的新列,并用
'Correct'
'error'
的值填充空格

但我只得到一个错误:

错误:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
我做错了什么


编辑:错误保持不变。

假设您的数据帧具有以下结构:

d = {"symbol":["Heart", "Heart", "Diamond", "Spade"]}
df = pd.DataFrame(d)
print(df)

    symbol
0    Heart
1    Heart
2  Diamond
3    Spade
您可以在“符号”列上使用
.map
,以获得所需的结果:

df['color'] = df['symbol'].map(lambda x: 'red' if x == 'Heart' else 'not red')
print(df)

    symbol    color
0    Heart      red
1    Heart      red
2  Diamond  not red
3    Spade  not red
编辑

基于OP的新编辑,在希望考虑多栏条件的情况下,最好使用<代码>。应用行:

df_s['color'] = df_s.apply(lambda r: 'red' if r[0]=='Heart' and r[1]=='Heart' else 'not red', axis=1)
要检查两列是否相同,可以执行以下操作(使用相同的逻辑):

如果要检查所有列或多于2列:

df_s.apply(lambda r: 'correct' if len(set(r)) == 1 else 'wrong', axis=1)

如果一行中的所有列都相同,则该行的
set()
的长度将为1。

问题在于,您希望查看每行中的一个值,如果该行中的值等于
“Heart”
,则需要对其进行处理。但是,您要做的是查看整个系列,python不知道如何处理它(何时为真,何时应该执行?是否所有元素都为真(
a.all()
)或至少一个(
a.any()
)或…)

要实现您的要求,您可以执行以下操作:

df.loc[df['symbole']='Heart','color']='red'
df.loc[df['symbole']!='Heart','Color']='not red'
有关更多方法,请参见以下答案:

d = {"symbol":["Heart", "Heart", "Diamond", "Spade"], "symbol2":["Heart","Diamond", "Spade", "Spade"]}`

df_s = pd.DataFrame(d)


df_s['color'] = df_s['symbol'].map(lambda x: 'Correct' if x == df_s['symbol2'] else 'Wrong')


您还可以使用以下应用程序:

df['color'] = df.apply(lambda row: (   
                                      'red'
                                       if row['symbole'] == 'Heart'
                                       else 'not red',
                                       axis=1
                                   )

我试过你的代码,但在我的情况下不起作用。如果您的条件是两列相同,您是否必须更改某些内容?因此,如果这两列显示的是“真”,如果不是“假”。我也遇到了同样的错误。@booklover,所以请分享您的数据帧示例。我不明白为什么它在你的具体案例中不起作用。我编辑了这个问题。很抱歉,我无法生成代码格式,但如果您将代码放入编辑器中,您应该会看到它。@booklover请查看我的编辑,它现在可以与新添加的示例一起使用,但只有当符号为Heart时,这才解决问题。如果其他符号相同,则不同。谢谢,我尝试过,但效果不太好。我把问题改了一点。是不是因为我想比较两列而不是一列的值?