[英]Slicing a DataFrame in pandas?
我在熊貓中遇到df問題。 讓我們假設我有這個數據幀:
k = [1,2,3,4,5,6,7,8,9,10,11,12]
k = pd.DataFrame(k).T
這是一個1x12數據幀,我想得到一個包含4列的df,如k4:
k1 = pd.DataFrame([1,2,3,4])
k2 = pd.DataFrame( [5,6,7,8])
k3 = pd.DataFrame([9,10,11,12])
frames = [k1,k2,k3]
k4 = pd.concat(frames, axis = 1).T
我的原始df比k大得多,但它的列數是4的倍數,我想把它切成4列df。 我想它可能是與i%4 == 0有關的東西,但我真的不知道該怎么做。
提前致謝。
我想念一個問題。 我應該有k4。 對不起大家。
總而言之,我有一個大行,len的倍數為4,遠大於12:
0 1 2 3 4 5 6 7 8 9 10 11
0 1 2 3 4 5 6 7 8 9 10 11 12
我需要制作一個包含4列的df,每4個元素更改一行:
0 1 2 3
0 1 2 3 4
0 5 6 7 8
0 9 10 11 12
您可以MultiIndex
樓層除法和模數在列中創建MultiIndex
,然后使用stack
,刪除index
第一級MultiIndex
add reset_index
:
k = [1,2,3,4,5,6,7,8,9,10,11,12]
k = pd.DataFrame(k).T
k.columns = [k.columns // 4, k.columns % 4]
print (k)
0 1 2
0 1 2 3 0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 10 11 12
print (k.stack().reset_index(level=0, drop=True))
0 1 2
0 1 5 9
1 2 6 10
2 3 7 11
3 4 8 12
編輯:
只需要0
表示MultiIndex
交換第一級,而不是默認的最后一級
print (k.stack(0).reset_index(level=0, drop=True))
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
或者用地板划分交換模數:
k = [1,2,3,4,5,6,7,8,9,10,11,12]
k = pd.DataFrame(k).T
k.columns = [k.columns % 4, k.columns // 4]
print (k)
0 1 2 3 0 1 2 3 0 1 2 3
0 0 0 0 1 1 1 1 2 2 2 2
0 1 2 3 4 5 6 7 8 9 10 11 12
print (k.stack().reset_index(level=0, drop=True))
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
使用numpy.ndarray.reshape
另一個numpy解決方案更快:
k = [1,2,3,4,5,6,7,8,9,10,11,12]
print (pd.DataFrame(np.array(k).reshape(-1,4)))
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.