各位前輩大大好,小弟遇到一個不知名的問題,希望有前輩大大可以幫忙解惑。
我的df,有3個欄位,分別是
trial_Level (type=str)
signupDays_Level (type=str)
yesNo (type=float64)
原本我的代碼在做corsstab的時候,都有很正常的按照順序排列
然後有一天他突然就失靈了,原本分組10的都會在最後面,但突然就往前跑了,由於我有十幾個crosstab要跑,希望能找到一個解決根本的問題。
這個corsstab是為了進行heatMap,錯位對整體顏色的影響滿大的
在獨立執行pd.crosstab([df_name[columnA],(df_name['yesNo'] == 0)], df_name[columnB])
的時候,就產生錯位了,所以初步判斷這個錯誤與後面的代碼"應該"是沒有關聯性。
附上代碼
cross_test
def cross_test(df_name, columnA, columnB, showtype=2):
tdf1 = pd.crosstab([df_name[columnA],(df_name['yesNo'] == 0)],
df_name[columnB])
tdf2 = pd.crosstab([df_name[columnA],(df_name['yesNo'] == 1)],
df_name[columnB])
tdf3 = tdf1 / (tdf1 + tdf2)
iloclist = []
#showtype參數2:僅顯示True的部分
if showtype == 2 :
[iloclist.append(x) for x in range(1,len(tdf3),2)]
return tdf3.iloc[iloclist,:]
#showtype參數3:僅顯示False的部分
if showtype == 3 :
[iloclist.append(x) for x in range(0,len(tdf3),2)]
return tdf3.iloc[iloclist,:]
return tdf3
cross_test(tdf, 'trial_Level', 'signupDays_Level')
heatMap_test
def heatMap_test(df_name, columnA, columnB, showtype=2):
plt.figure(figsize=(8, 6))
sns.set(font_scale=1)
sns.heatmap(cross_test(df_name, columnA, columnB, showtype).fillna(0),annot=True)
heatMap_test(tdf, 'trial_Level', 'signupDays_Level')
dataLevel
def dataLevel(series_in, new_name):
quantileEdges = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]
binsEdges = []
binsNames = []
#根據series_in進行quantile(劃分10組界線)
for i in quantileEdges:
sq = series_in.quantile(i)
binsEdges.append(sq)
binsNames.append('{}_分組{}({})'.format(series_in.name, int(i*10), int(sq)))
#處理bins前幾項重複的問題(ex: '時間diff' 前30%數據都是0)
binsEdges = sorted(set(binsEdges))
binsNames = binsNames[-len(binsEdges)+1:]
#分組並建立新欄位
df[new_name] = pd.cut(df[series_in.name].fillna(0), bins=binsEdges, labels=binsNames, right=False)
print('new column [{}] created!'.format(new_name))
return True