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