我有数据框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
仅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)
#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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。