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时,这才解决问题。如果其他符号相同,则不同。谢谢,我尝试过,但效果不太好。我把问题改了一点。是不是因为我想比较两列而不是一列的值?