簡體   English   中英

在pandas中切片DataFrame?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM