gpt4 book ai didi

python - Pandas int 或 float 列到百分比分布

转载 作者:太空狗 更新时间:2023-10-30 00:42:19 29 4
gpt4 key购买 nike

我有一个 Pandas 数据框 df:

import pandas as pd
import numpy as np
data = {'A':[250,100,400,np.nan,300]}
df = pd.DataFrame(data)
print(df)

A
0 250.0
1 100.0
2 400.0
3 NaN
4 300.0

我想根据列表中的值 (values) 转换此数据场 (DF)。

values = [0,200,400,600]

在 df 中,第一个数字 250。它在列表 values 中介于 200 和 400 之间,因此 (|200-250|)/(400-200) = 0.25 和 (400-250)/(400-200)=0.75,分别。如果数据丢失 (np.nan),则行必须用 0 填充。我想以这种方式转换此数据框。

所需的数据框:

     0   200   400  600
0 0.0 0.25 0.75 0.0
1 0.5 0.50 0.00 0.0
2 0.0 0.00 1.00 0.0
3 0.0 0.00 0.00 0.0
4 0.0 0.50 0.50 0.0

最佳答案

这是使用 pd.cut 的一种方法

s=pd.cut(df.A,values).dropna()
x=s.map(lambda x : x.left).astype(int).to_frame('V')
y=s.map(lambda x : x.right).astype(int).to_frame('V')
x['r']=(df.A-x.V)/(y.V-x.V)
y['r']=(y.V-df.A)/(y.V-x.V)
df1=pd.concat([x,y]).set_index('V',append=True).\
r.unstack(fill_value=0).\
reindex(columns=values,index=df.index,fill_value=0)
df1
Out[110]:
V 0 200 400 600
0 0.0 0.25 0.75 0.0
1 0.5 0.50 0.00 0.0
2 0.0 1.00 0.00 0.0
3 0.0 0.00 0.00 0.0
4 0.0 0.50 0.50 0.0

关于python - Pandas int 或 float 列到百分比分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57169924/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com