lanthon 2020-03-01 15:06 采纳率: 0%
浏览 539
已结题

python如何多条件筛选列后求列的中位数

1.本人现有一个25*3000的excel,里面包含不同股票的收益率统计,列名包括所在板块、发行年份、公司类型,市值等。我想筛选出多个条件的收益率中位数,如竞价方式下2011-2019年创业板企业的每年收益率中位数和正收益的比重。
2.我写了段代码,它一直报错说(与]不匹配。我找了很久,始终没有找出问题。还请各位大神帮忙看看。

import xlrd
import pandas as pd
import xlwt

def median(data):
    data = sorted(data) #先排序
    size = len(data) #得到数列的长度
    if size % 2 == 0:   # 通过取余判断列表长度为偶数
        medians = (data[size//2]+data[size//2-1])/2 #取排序后位于中间的两位数。
    else:   # 因为用2取取余,不是0,就是1,所以直接取中间值。也就是判断列表长度为奇数
        medians = data[(size-1)//2] #奇数就是中间的数就是中位数。   
    return medians

df=pd.read_excel(r'd:\python and model\定增\定增收益分析统计.xlsx')
df1=df.iloc[:,8:24]
df2=df1[df1['定价方式']=='竞价'] 
A=[]
B=[]
for x in range(2010,2019):
    nian=string(x)
    zhengshouyi=[]
    zhongshouyi=[]

    zhengshouyi=(df2[(df2['所属板块']=='创业板')&(df2['发行年份']==nian)&(df2['定增收益率']>0)].count())/(df2[df2['发行年份']==nian.count())
    zhongshouyi=median(df2[(df2['所属板块']=='创业板')&(df2['发行年份']==nian)]['定增收益率'])
    for i in range(0,len(df2['发行年份']==nian))):          
        A.append(zhengshouyi[i])
        B.append(zhongshouyi[i])

print(A)
print(B)
  • 写回答

1条回答 默认 最新

  • 张一毛 2020-03-01 16:35
    关注

    zhengshouyi=(df2[(df2['所属板块']=='创业板')&(df2['发行年份']==nian)&(df2['定增收益率']>0)].count())/(df2[df2['发行年份']==nian.count()) 是不是这句后面是方括号。。。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog