python实训

#  一、循环

#  1.1用for循环做九九乘法表
for i in range(1,10):
    for j in range(1,i+1):
        print("{}x{}={}\t".format(j,i,i*j),end="")  #  \t是为了对齐,end=""是为了不换行
    print()  #换行

#  1.2用while循环做九九乘法表
i = 1
while i < 10:
    j = 1
    while j <= i:
        print("{}x{}={}\t".format(j,i,i*j),end="")
        j += 1
    print()
    i += 1

#  1.3构建投资组合(期末大题),5只股票有(5^2-5)/2=10种组合,所以需要循环10次,也就是行索引从0遍历至9,这里用temp表示
#  比如abcde,ab ac ad ae bc bd be cd ce de十种组合
#  对应01234,01 02 03 04 12 13 14 23 24 34,这里用ij表示
#  第一轮temp=0、i=0、j=1,第二轮temp=1、i=0、j=2,第三轮temp=2、i=0、j=3,第四轮temp=3、i=0、j=4,第五轮temp=4、i=1、j=2
#  第六轮temp=5、i=1、j=3,第七轮temp=6、i=1、j=4,第八轮temp=7、i=2、j=3,第九轮temp=8、i=2、j=4,第十轮temp=9、i=3、j=4
temp = 0
for i in range(df.shape[0]):
    for j in range(i+1,df.shape[0]):
        Ndf.loc[temp,"股票组合"] = df.loc[i,"股票名称"]+"+"+df.loc[j,"股票名称"]  #+"+"+意思是用加号将两股票名称隔开
        Ndf.loc[temp,"组合回报率"] = df.loc[i,"回报率"]/2 + df.loc[j,"回报率"]/2
        Ndf.loc[temp,"组合波动率"] = df.loc[i,"波动率"]/2 + df.loc[j,"波动率"]/2
        temp += 1

#  二、排序(排名)

#  2.1使用sort_values按名字进行排序
df.sort_values(by="名字",ascending=True,inplace=True)  #ascending=True表示升序,inplace=True表示在原始数据上进行

#  2.2以下是使用老师上课时演示的方法进行排名
l = hq["涨跌幅(%)"]  #把"涨跌幅(%)"这列复制到l
for i in range(hq.shape[0]):  #i从0遍历至hq的行数-1
    #  通过index拿到"涨跌幅(%)"这列的最大值的索引,并将i+1作为其排名赋值到"涨跌幅排名"列
    hq.loc[hq.index[hq["涨跌幅(%)"]==l.max()],"涨跌幅排名"] = i + 1
    #  drop为删除
    l.drop(l.index[l==l.max()],inplace=True)  #这行代码每执行一次都会删除l中的最大值

#  2.3以下为是使用rank函数进行排名,method="dense"为值相等时取最小排序作为排名且后续排名+1
hq["涨跌幅排名"] = hq["涨跌幅(%)"].rank(method="dense",ascending=False)  #涨跌幅高的排第一

#  2.4冒泡排序
def bubble_sort(l):
    for i in range(len(l)):  #i从0遍历至l长度-1
        for j in range(len(l)-i-1):
            if l[j+1] < l[j]:  #比较j+1位置和j位置的数值大小
                l[j+1],l[j] = l[j],l[j+1]  #交换值
    return l
l1 = [2,9,3,2,1,10]
print(bubble_sort(l1))  #[1, 2, 2, 3, 9, 10]

#  2.5选择排序
def select_sort(l):
    copyl = l  #复制l到copyl
    temp = []  #创建一个叫temp的空列表
    for i in range(len(l)):  #i从0遍历至l长度-1
        Min = min(copyl)  #把copyl中的最小值赋值给Min
        copyl.remove(Min)  #移除copyl中的Min
        temp.append(Min)  #把Min添加到temp
    return temp
l1 = [2,9,3,2,1,10]
print(select_sort(l1))  #[1, 2, 2, 3, 9, 10]

#  三、分类

#  3.1用while将数据分为不活跃、一般、活跃
i = 0
while i < hq.shape[0]:
    a = hq.loc[i,"成交量"]
    if a < 1000:
        hq.loc[i,"成交量分析"] = "不活跃"
    elif a < 2000:
        hq.loc[i, "成交量分析"] = "一般"
    else:
        hq.loc[i, "成交量分析"] = "活跃"
    i += 1

#  3.2用for将数据分为不活跃、一般、活跃
for i in range(hq.shape[0]):
    a = hq.loc[i,"成交量"]
    if a < 1000:
        hq.loc[i,"成交量分析"] = "不活跃"
    elif a < 2000:
        hq.loc[i, "成交量分析"] = "一般"
    else:
        hq.loc[i, "成交量分析"] = "活跃"

#  3.3按证券代码和证券简称进行分组
new_hq = hq.groupby(["证券代码","证券简称"])

#  四、if可以写在一行

#  4.1.1常规写法
for i in range(df.shape[0]):
    if df.loc[i,"日个股交易股数"] < 2000:
        df.loc[i,"交易情况"] = "不活跃"
    elif df.loc[i,"日个股交易股数"] < 6000:
        df.loc[i, "交易情况"] = "一般"
    else:
        df.loc[i, "交易情况"] = "活跃"

#  4.1.2简洁写法
for i in range(df.shape[0]):
    df.loc[i,"交易情况"] = "不活跃" if df.loc[i,"日个股交易股数"] < 2000 else "一般" if df.loc[i,"日个股交易股数"] < 6000 else "活跃"

#  4.2.1常规写法
for i in range(hq.shape[0]):
    if hq.loc[i,"涨跌幅(%)"] > 0:
        if hq.loc[i,"成交量分析"] == "活跃":
            hq.loc[i,"分数"] = 4
        elif hq.loc[i,"成交量分析"] == "一般":
            hq.loc[i, "分数"] = 3
        else:
            hq.loc[i, "分数"] = 1
    else:
        if hq.loc[i, "成交量分析"] == "活跃":
            hq.loc[i, "分数"] = 3
        elif hq.loc[i, "成交量分析"] == "一般":
            hq.loc[i, "分数"] = 2
        else:
            hq.loc[i, "分数"] = 0

#  4.2.2简洁写法
for i in range(0,hq.shape[0]):
    if hq.loc[i,"涨跌幅(%)"] > 0:
        hq.loc[i, "分数"] = 4 if hq.loc[i,"成交量分析"] == "活跃" else 3 if hq.loc[i,"成交量分析"] == "一般" else 1
    else:
        hq.loc[i, "分数"] = 3 if hq.loc[i, "成交量分析"] == "活跃" else 2 if hq.loc[i, "成交量分析"] == "一般" else 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值