Pandas 1.1.4
考虑
df4 = pd.DataFrame({
'a': [1, 2, 3, 4]
})
counts = df4.value_counts().astype(np.int)
print(counts.index)
counts.reindex(counts.index.to_flat_index())
print(counts.index)
print(counts.index.to_flat_index())
输出:
MultiIndex([(4,), (3,), (2,), (1,)], names=['a']) MultiIndex([(4,), (3,), (2,), (1,)], names=['a']) Index([(4,), (3,), (2,), (1,)], dtype='object')
我希望能够与交换
df5 = pd.Series([5, 6, 7, 8], index=[1, 2, 3, 4])
print(df5.index)
其CCD_ 1为
int64索引([1,2,3,4],dtype='in64'(。
请注意,df4
的索引与df5
的索引相同,但value_counts
使其成为多索引。
如何解决此问题?不平坦我尝试似乎工作。
您可以从多索引的第0级提取索引,如下所示:
>>> counts.index.get_level_values(0)
Int64Index([4, 3, 2, 1], dtype='int64', name='a')
然后你可以把索引换成这样的值:
new_index = pd.Series([5, 6, 7, 8], index=[1, 2, 3, 4])
new_counts = counts.set_axis(
counts.index.get_level_values(0).map(new_index)
)
print(new_counts)
a
8 1
7 1
6 1
5 1
dtype: int64
但是,您可以简单地在列本身调用.value_counts()
,以避免对多索引进行篡改:
df['a'].value_counts()
当panda像本例中那样从字典创建数据帧时,它假设传递的dict的键应该是生成的dataframe的列。如果键应该是行,您应该初始化您的数据帧如下:
df4 = pd.DataFrame({'a': [1, 2, 3, 4]}, orient='index')
然后运行时:
print(counts.index.to_flat_index())
你得到
Index([(1, 2, 3, 4)], dtype='object')