开发者社区> 问答> 正文

转换百分比分布中的Padas列的功能

我有数据框df和列表v_a:

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

v_a = [0,200,400,600]

*问题:*我想制作一个函数,将df中的数据框列转换为百分比分布。

*例如:*号250DF在V_A,然后(400-250)/(400-200)= 200和400之间的谎言0.75是百分比它属于200和(1 - 0.75)= 0.25是百分比属于400。

类似地,df中的数字400位于v_a中的200和400之间((400-400)/(400-200)= 0对于v_a中的数字,(1- 0)= 1对于200中的v_a `)。

期望的结果

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

问题来源:stackoverflow

展开
收起
is大龙 2020-03-21 12:53:41 524 0
1 条回答
写回答
取消 提交回答
  • 仅Pandas解决方案:

    #Get DataFrame with intervals
    df2 = pd.DataFrame([[interval.left, interval.right] 
                        for interval in pd.cut(df['A'], v_a)],
                       columns=['col1', 'col2'])
    

    *

    #calculate values df2['val2']=(df2['col2'].sub(df['A']) .div(df2['col2'].sub(df2['col1'])) .clip(upper=1, lower=0)) df2['val1'] = 1 - df2['val2']

    #print(df2)

    col1 col2 val2 val1

    #0 200 400 0.75 0.25 #1 0 200 0.50 0.50 #2 200 400 0.00 1.00 #3 200 400 0.50 0.50 #4 200 400 0.95 0.05 *

    #Get the correct format new_df = (pd.wide_to_long(df2.reset_index(), ['col', 'val'], i='index', j='type') .pivot_table(index='index',columns='col',values='val') .reindex(columns=v_a) .fillna(0) .rename_axis(columns=None, index=None)) 输出

    print(new_df)
    
    #   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.50  0.50  0.0
    #4  0.0  0.05  0.95  0.0
    

    回答来源:stackoverflow

    2020-03-21 12:54:00
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
重新定义计算的边界 立即下载
混合存储产品 立即下载
图计算优化技术探索 立即下载

相关实验场景

更多