#!/usr/bin/env python
# encoding: utf-8
import pyodbc
import pandas as pd
import numpy as np
sql="""
select 產品線,終端,品規,銷售模式
,cast(year([日期1]) as varchar(50))+right('00'+cast(month([日期1]) as nvarchar(50)),2)'年月'
,sum([醫院入庫數量])'數量'
,sum(iif([銷售模式]='自營',[商業發貨單價]*[醫院入庫數量]/10000,[底價]*[醫院入庫數量]/10000))'**'
from [商務部流向明細表] where [銷售模式]!='自營' or [銷售模式]!='小包' or [銷售模式]!='中包'
group by 產品線,終端,品規,year(日期1),month(日期1),銷售模式
"""conn = pyodbc.connect \
('driver=;server=apsoozrk6v8fk4x\mssqlserver12;database=流向;uid=sa;pwd=abcd2012')
df = pd.read_sql(sql,con=conn)
conn.close()
dd=pd.pivot_table(df, #dataframe
index=['產品線','終端','品規'], #資料透檢視的行,y軸
values=['數量','**'], #資料透檢視的值,aggfunc的計算物件
columns=['年月'], #資料透檢視的列,x軸
aggfunc=[np.sum,np.mean], #對值的計算公式
fill_value=0, #缺失值預設為0
margins=true) #總計
"""
df.index #索引
df.values #值
df.columns #欄位名
df.t #轉置
df.head(6) #前6行
df.tail(6) #後6行
df.sort_values('數量',ascending=false) #按數量排序
df[2:9] #切片
df['czp']=df['產品線']+'-'+df['終端']+'-'+df['品規'] #新增一列合併「產品線終端品規」
df.set_index(['czp','年月'],inplace=true) #把列設定為索引,可以設定3個
del df['產品線'] #只能刪乙個 df.drop(df.columns[x], axis=1, inplace=true)
df.drop(df.columns[[0,1,2,3,4,5]], axis=1, inplace=true)
#刪除多列,從0計數,axis=1 對行索引操作,axis=0 對列索引操作
df.drop(columns=['b', 'c']) #刪除列
df.drop(index=[0, 1]) #刪除行
df.unstack(level=1) #按0,1,2的序號選第3個索引做行索引轉置
df.swaplevel('czp','年月') #層次索引由'czp','年月',變為'年月','czp'
#太長用『 \』分,空格+'\'
df.reset_index() #全部索引變成列 不改變原df
#df.reset_index(level=['tick', 'obs'])/df.reset_index(level=0, inplace=true)指定索引變成列
#切片#dh.ix[:6,:5] 被棄用
dh.iloc[:6,:5] #通過行號切片
dh.loc[:5,'產品線':'總**'] #通過標籤值切片
#查詢重複項
for i in dt['cc']:
count = 0
for j in dt['cc']:
if i==j:
count +=1
if count>1:
print(i,':',count)
else:
print('沒有重複項')
#修改dataframe列名
# ④暴力(好處:也可只修改特定的列)
df.rename(columns=('$a': 'a', '$b': 'b', '$c': 'c', '$d': 'd', '$e': 'e'}, inplace=true)
# ⑤修改
df.rename(columns=lambda x:x.replace('$',''), inplace=true)
#修改列名
df.rename(columns=,inplace=true)
df.columns.values.tolist() #檢視列名
#列名df['mon']=da2['年月']
df['num']=da2['sum']['數量']
df['rmb']=da2['sum']['**']
#畫圖df.plot(secondary_y=['rmb'])
plt.show()
"""
python小菜鳥入門
import os os.getcwd os.chdir os.getcwd name input micheal 接下來要執行的 部分需要首行縮排4位 官方標準,3位也能執行 當字串中包含 或者 的時候需要使用轉義字元,for instance i m ok 輸出就是 i m ok 其中 n表示換...
cocos小菜鳥學習筆記(2)
8 ccmoveto建立的兩個引數 float duration,const ccpoint position 第乙個引數為動作執行時間,第二個引數為移動目的座標 ccmoveby的引數 float duration,const ccpoint deltaposition 第乙個引數也是時間,但第二...
小菜鳥成長記
include define n 100 typedef struct book book int num 0,pnum int arrin book a,int pnum 輸入陣列元素,個數num由程式中自己確定。return i void arrout book a,int num 輸出陣列各元...