python apply函数保存结果,python - Pandas,Apply函数返回错误结果 - SO中文参考 - www.soinside.com...

我在使用此功能时遇到此问题,该功能必须在一列中返回每个功能的比例。

这里有些数据很容易构成一个想法:df2 = pd.DataFrame({'X': ['A', 'A', 'B' , 'C'], 'Y': [1, 0, 0 , 1], 'Z': [1, 0, 1 , 1]})

df2['X'].value_counts()

[当我计算值时我得到A 2

B 1

C 1

现在,我需要获取每个“ X”值的比例for freq in df2['X'].value_counts():

#print(freq)

print(freq/df2['X'].value_counts().sum())

以下结果:0.5

0.25

0.25

完美,

现在,我必须申请我的数据框并获得一个新列。功能下方:def get_proportion(df):

for freq in df2['X'].value_counts():

return (freq/df2['X'].value_counts().sum())

df2["A"]=df2.apply(get_proportion, axis=1)

结果:X Y Z A

0 A 1 1 0.5

1 A 0 0 0.5

2 B 0 1 0.5

3 C 1 1 0.5

我应该得到X Y Z A

0 A 1 1 0.5

1 A 0 0 0.5

2 B 0 1 0.25

3 C 1 1 0.25

怎么了?

如果在循环下设置了返回,则会出现缩进错误def get_proportion(df):

for freq in df['X'].value_counts():

return freq/df['X'].value_counts().sum()

IndentationError:期望缩进的块

如果我设置参数df2["A"]=df2.apply(get_proportion(df2), axis=1)

我收到错误TypeError: 'numpy.float64' object is not callable

我尝试另一种方法,def get_proportion(df):

val=[]

for freq in df.value_counts():

xv=freq/df.value_counts().sum()

print(xv)

val.append(xv)

#df2["A"] = df2[xv]

#return freq/df.value_counts().sum()

return val

val=get_proportion(df2['X'])

我得到了很好的结果0.5

0.25

0.25

当我加入数据框时df2["A"]=df2.join(pd.DataFrame(val))

我得到:X Y Z A

0 A 1 1 A

1 A 0 0 A

2 B 0 1 B

3 C 1 1 C

我不明白。我跳过一些东西谢谢您的帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值