Python 如何将嵌套列添加到三维数据帧?
熊猫新手,不太清楚3D数据框是如何工作的。我的数据帧名为Python 如何将嵌套列添加到三维数据帧?,python,python-3.x,pandas,numpy,dataframe,Python,Python 3.x,Pandas,Numpy,Dataframe,熊猫新手,不太清楚3D数据框是如何工作的。我的数据帧名为'new',如下所示: unique cat numerical a b c d e f 0 0 1 2 3 4 5 1 0 1 2 3 4 5 unique cat numerical a b z c d
'new'
,如下所示:
unique cat numerical
a b c d e f
0 0 1 2 3 4 5
1 0 1 2 3 4 5
unique cat numerical
a b z c d e f
0 0 1 9 2 3 4 5
1 0 1 9 2 3 4 5
new['unique'] = 'a'
我想插入列'z'
,这样它的结果如下:
unique cat numerical
a b c d e f
0 0 1 2 3 4 5
1 0 1 2 3 4 5
unique cat numerical
a b z c d e f
0 0 1 9 2 3 4 5
1 0 1 9 2 3 4 5
new['unique'] = 'a'
从我的数据框中切出'unique'
后,我成功地创建了一个新列:
这样做:
new_column = new.loc[:,'unique'].assign(z=pd.Series([9,9]).values)
给我这个:
a b z
0 0 1 9
1 0 1 9
但是,我不知道如何将它放回数据帧。我试过:
new['unique'] = new_column
但后来我发现它只是尝试替换'unique'
下所有行和列中的所有值,如下所示:
unique cat numerical
a b c d e f
0 0 1 2 3 4 5
1 0 1 2 3 4 5
unique cat numerical
a b z c d e f
0 0 1 9 2 3 4 5
1 0 1 9 2 3 4 5
new['unique'] = 'a'
获取:
而使用.loc
则会得到以下结果:
unique cat numerical
a b c d e f
0 NaN NaN 2 3 4 5
1 NaN NaN 2 3 4 5
以下是我的完整代码:
import pandas as pd
import numpy as np
data=[[0,1,2,3,4,5],[0,1,2,3,4,5]]
datatypes=np.array(['unique','unique','cat','cat','numerical','numerical'])
columnnames=np.array(['a','b','c','d','e','f'])
new = pd.DataFrame(data=data, columns=pd.MultiIndex.from_tuples(zip(datatypes,columnnames)))
print('new: ')
print(new)
new_column = new.loc[:,'unique'].assign(z=pd.Series([9,9]).values)
print('\nnew column:')
print(new_column)
new.loc[:,'unique'] = new_column
print('\nattempt 1:')
print(new)
new['unique'] = new_column
print('\nattempt 2:')
print(new)
一种方法是:
# Create your new multiindexed column:
new['unique','z'] = 9
# Re-order your columns in your desired order:
new = new[['unique', 'cat', 'numerical']]
>>> new
unique cat numerical
a b z c d e f
0 0 1 9 2 3 4 5
1 0 1 9 2 3 4 5
您的数据生成过程是什么样子的?我假设z有两个以上的值。它可以在生成帧时添加吗?@ako我本来不想这样做,因为我认为继续重新排列数据列表中的值会非常麻烦,而且时间效率低下,但那是在我发现存在重新排列之前。。。再说一次,作为熊猫的新手,我甚至不知道我是否正在使用一种生成适合我的数据帧的方法。请阅读-总结是,这不是一种向志愿者致辞的理想方式,可能会对获得答案产生反作用。请不要把这个添加到你的问题中。该死,谢谢!我发誓我已经试过了,但没关系。另一方面,看看@ako所说的,在生成时添加所有列,然后重新排列表格,而不是在每次添加列后重新排列,会更快吗?好的,如果您实际上是手动生成数据,那么是的,最好包含数据。但我假设您想找到一种专门添加新数据的方法,在这种情况下,我认为重新生成所有数据并不是一个真正的选项。。。