繁体   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