我有一些数据框, 我已经运行了以下命令:
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
显然不是我所需要的,我需要设置和更改值而不创建新列
答案 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