# 一、循环
# 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