Python 与另一列相比,熊猫返回1或0';是的

Python 与另一列相比,熊猫返回1或0';是的,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个dataframe,我正在尝试创建一个返回1或0的新列。逻辑是如果状态的['Avg_Temp']大于或等于['Avg_Temp'].mean(),则我希望['Hot']列的值为“1”,否则它的值应为“0” 我的尝试如下,但我的df['Hot']结果都是'1',所以我知道我做错了什么 数据: 错误在这一行: df10['Hot'] = df10.loc[df10['Avg_Temp'] >= TempMean] = 1 df10.loc[df10['Avg_Temp']>=Temp

我有一个dataframe,我正在尝试创建一个返回1或0的新列。逻辑是如果状态的['Avg_Temp']大于或等于['Avg_Temp'].mean(),则我希望['Hot']列的值为“1”,否则它的值应为“0”

我的尝试如下,但我的df['Hot']结果都是'1',所以我知道我做错了什么

数据:


错误在这一行:

df10['Hot'] = df10.loc[df10['Avg_Temp'] >= TempMean] = 1
df10.loc[df10['Avg_Temp']>=TempMean]=1
的意思是:“将1设置为与条件匹配的行”。然后将此操作的结果分配给列
Hot
。您要做的是将该行替换为:

df10.loc[df10['Avg_Temp'] >= TempMean, 'Hot'] = 1

错误在这一行:

df10['Hot'] = df10.loc[df10['Avg_Temp'] >= TempMean] = 1
df10.loc[df10['Avg_Temp']>=TempMean]=1
的意思是:“将1设置为与条件匹配的行”。然后将此操作的结果分配给列
Hot
。您要做的是将该行替换为:

df10.loc[df10['Avg_Temp'] >= TempMean, 'Hot'] = 1

df10['Hot']=df10.loc[df10['Avg_Temp']>=TempMean]=1

不做你想做的事。这相当于

df10.loc[df10['Avg_Temp'] >= TempMean] = 1
df10['Hot'] = 1
它首先将Avg_Temp column>=TempMean的每一行设置为1,然后将Hot column设置为1

你可能想要

In [51]: df10["Hot"] = 0

In [52]: df10.loc[df10["Avg_Temp"] >= TempMean, "Hot"] = 1

In [53]: df10
Out[53]: 
    Avg_Temp  Hot
MI        66    1
AL        78    1
OH        50    0
VT        64    1
NB        34    0
或者更简单一点

df10["Hot"] = (df10["Avg_Temp"] >= TempMean).astype(int)

我们不必首先设置df10[“热”]。

df10['Hot']=df10.loc[df10['Avg_Temp']>=TempMean]=1

不做你想做的事。这相当于

df10.loc[df10['Avg_Temp'] >= TempMean] = 1
df10['Hot'] = 1
它首先将Avg_Temp column>=TempMean的每一行设置为1,然后将Hot column设置为1

你可能想要

In [51]: df10["Hot"] = 0

In [52]: df10.loc[df10["Avg_Temp"] >= TempMean, "Hot"] = 1

In [53]: df10
Out[53]: 
    Avg_Temp  Hot
MI        66    1
AL        78    1
OH        50    0
VT        64    1
NB        34    0
或者更简单一点

df10["Hot"] = (df10["Avg_Temp"] >= TempMean).astype(int)
这样我们就不必先设置df10[“热”]。

试试看

df['Hot'] = np.where((df['Avg_Temp'] > df['Avg_Temp'].mean()), 1, 0)
试一试

我喜欢

avg = df.Avg_Temp
df.assign(Hot=avg.ge(avg.mean()).astype(np.uint8))
我喜欢

avg = df.Avg_Temp
df.assign(Hot=avg.ge(avg.mean()).astype(np.uint8))

代码有几个问题,例如缩进。编辑问题,使其更加清晰。目前,什么是
df
和什么是
df10
之间存在混淆<代码>df10从来没有定义过。这可能就足够了:
df10['Hot'][df10['Avg_Temp']>=TempMean]=1
。请注意,倒数第二行中实际上有两个赋值。@Evert:通常应该避免这样的链式赋值。代码中有几个问题,例如缩进。编辑问题,使其更加清晰。目前,什么是
df
和什么是
df10
之间存在混淆<代码>df10从来没有定义过。这可能就足够了:
df10['Hot'][df10['Avg_Temp']>=TempMean]=1
。请注意,倒数第二行实际上有两个赋值。@埃弗特:通常应该避免这样的链式赋值。好的解决方案+1。好的解决方案+1。我使用了两个中较短、较简单的一个,解决了我的问题。非常感谢。我使用了两者中较短、较简单的一种,它解决了我的问题。非常感谢。