好的,我用一个新示例编辑了这个问题。
我无法在数据框中填充新列imshow(z, aspect=gx.ptp() / gy.ptp())
show() # needed if you try this in PyCharm
。
#我使用了其中一个答案的示例:
df['Colour']
使用此代码,我想创建一个名为'Colour'的新列,并用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')
或'Correct'
的值填充空白。
但是我只得到错误:
'Wrong'
我做错了什么?
编辑:错误保持不变。
答案 0 :(得分:0)
假设您的数据框具有以下结构:
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的新修改,以防万一需要考虑多列的情况,最好按行使用.apply
:
df_s['color'] = df_s.apply(lambda r: 'red' if r[0]=='Heart' and r[1]=='Heart' else 'not red', axis=1)
要检查两列是否相同(可以使用相同的逻辑):
df_s.apply(lambda r: 'correct' if r[0]==r[1] else 'wrong', axis=1)
如果您要检查所有列或更多,然后2:
df_s.apply(lambda r: 'correct' if len(set(r)) == 1 else 'wrong', axis=1)
如果一行中的所有列都相同,则该行的set()
的长度为1。
答案 1 :(得分:0)
问题是您想查看每一行中的值,并且如果该行中的值等于"Heart"
,则想对其进行处理。但是,您正在做的是看整个系列,而python不知道该怎么做(何时正确,应该这样做?如果所有元素都正确(a.all()
)或至少一个(a.any()
或...)。
要实现您的要求,可以执行以下操作:
df.loc[df['symbole'] == 'Heart', 'Colour'] = 'red'
df.loc[df['symbole'] != 'Heart', 'Colour'] = 'not red'
有关更多方法,请参见以下答案:
Using conditional to generate new column in pandas dataframe
答案 2 :(得分:0)
您还可以使用熊猫套用:
df['color'] = df.apply(lambda row: (
'red'
if row['symbole'] == 'Heart'
else 'not red',
axis=1
)