我有一个包含国家名称和它们在能源输出中所占百分比的数据框。 我需要添加一个新的列,根据该国的能源产出高于或低于能源产出中位数,分配1或0。一些伪代码是:
import pandas as pd
def answer():
df = pd.DataFrame({'name':['china', 'america', 'canada'], 'output': [33.2, 15.0, 5.0]})
df['newcol'] = df.where(df['output'] > df['output'].median(), 1, 0)
return df['newcol']
answer()
代码返回
ValueError: Wrong number of items passed 2, placement implies 1
我觉得这是一个非常简单的修复,但是我对Pandas
还是个新手。
请帮我结束沮丧
你不需要循环,因为解决方案是矢量化的。在
^{1}$对于错误传递的项数错误,数据框。在哪里工作有点不同于np.哪里. 它返回一个与self形状相同的对象,其对应的条目来自self,其中cond为True,否则为other。因此,它返回一个包含两列的dataframe而不是一个series,因此当您试图将该dataframe分配给一个series时,您会得到错误消息。在
@Vaishali解释了
pd.DataFrame.where
没有如您所期望的那样工作,并建议您使用np.where
,这是一个非常好的建议。在我可以简单地把布尔结果转换成整数。在
设置
^{1}$选项1
^{pr2}$选项2
或者使用底层的numpy数组更快
相关问题 更多 >
编程相关推荐