Pandas DataFrame基于其他列指定1,0个值

2024-06-06 23:11:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含国家名称和它们在能源输出中所占百分比的数据框。 我需要添加一个新的列,根据该国的能源产出高于或低于能源产出中位数,分配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还是个新手。 请帮我结束沮丧


Tags: 数据代码answerimport名称pandasdfoutput
2条回答

你不需要循环,因为解决方案是矢量化的。在

^{1}$

对于错误传递的项数错误,数据框。在哪里工作有点不同于np.哪里. 它返回一个与self形状相同的对象,其对应的条目来自self,其中cond为True,否则为other。因此,它返回一个包含两列的dataframe而不是一个series,因此当您试图将该dataframe分配给一个series时,您会得到错误消息。在

@Vaishali解释了pd.DataFrame.where没有如您所期望的那样工作,并建议您使用np.where,这是一个非常好的建议。在

我可以简单地把布尔结果转换成整数。在

设置

^{1}$

选项1

^{pr2}$

选项2
或者使用底层的numpy数组更快

o = df['output'].values
df['newcol'] = (o > np.median(o)).astype(int)

相关问题 更多 >