我如何比较熊猫中的值并更改值

时间:2020-01-08 16:55:30

标签: pandas dataframe

我有一些数据框, 我已经运行了以下命令:

share_df=df.iloc[:,60:61]

这使我成为一列带有数字的数据框, 现在我想在此share_df上运行for循环,以查看该值是否大于中位数,然后将其设置为1,否则将其设置为0 这是数据框:

        shares
   0    593
   1    711
   2    1500
   3    1200
   4    505
   . .. ...

我想与中位数进行比较,所以我做了:

medianShareValue=share_df.median()

1。问题:当我这样做时:

 for value in share_df:
   if value > medianShareValue:
       do something..  

我收到错误消息:

ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()
或a.all()。

------------------ update ------------- 对于问题2的修正是我的错误:

share_df.columns=['shares']

2。问题: 当我尝试更改数据框中的值时出现错误 (相同的数据框)

df_share.at[0, 'shares']=1

我得到这个df:

    shares  shares
0   593     1.0
1   711     NaN
2   150     NaN
3   1200    NaN
4   505     NaN

显然不是我所需要的,我需要设置和更改值而不创建新列

2 个答案:

答案 0 :(得分:1)

不要在Python中编写for循环,那样会很慢。

您可以代替

isActive = 1

答案 1 :(得分:0)

您可以在熊猫条件下做到这一点。想象一下,这是share_df

   shares
0   2
1   5
2   6
3   10
4   12
5   5

您必须运行以下命令,该命令基本上将新列设置为0,并在值大于中位数的每个位置放置1。

medianShareValue=share_df.median()
# Define condition
BIGGER_THAN_MEDIAN = share_df["shares"]>median_value[0]

# Set new column with all values to 0
share_df.loc[:,"bigger_than_mean"] = 0

# Update values that are bigger than the median
share_df.loc[BIGGER_THAN_MEDIAN, "bigger_than_mean"]=1

您的输出是:

    shares  bigger_than_median
0   2       0
1   5       0
2   6       1
3   10      1
4   12      1
5   5       0