gpt4 book ai didi

python - 是否有列的 reset_index,或将列标题移动到内部索引而将其索引位置保留为外部索引的方法?

转载 作者:太空狗 更新时间:2023-10-30 02:16:31 29 4
gpt4 key购买 nike

示例数据框:

import numpy as np
df = pd.DataFrame(np.random.randint(0, 10, size=(10, 4)), columns=list('ABCD'))

有没有办法为列重置索引?或者轻松地插入带有列索引位置值的行?我希望索引位置是最外层的索引,而保留列标题作为最内层的索引。

最佳答案

a.1) 删除列名

df.columns = pd.RangeIndex(df.columns.size)
df

输出:

    0   1   2   3
#---------------#
0 0 1 3 3
1 2 2 0 2
2 2 1 3 1
3 2 1 0 0

a.2) 删除列名称(一行)
可能会出现性能问题和副作用,请参阅下面的讨论。

df.T.reset_index(drop=True).T 

输出:

    0   1   2   3
#---------------#
0 0 1 3 3
1 2 2 0 2
2 2 1 3 1
3 2 1 0 0

b.1) 将列名移动到一行中(一行)
相同的问题,请参阅下面的讨论。

df.T.reset_index().T

输出:

        0   1   2   3
#-------------------#
index A B C D
0 0 1 3 3
1 2 2 0 2
2 2 1 3 1
3 2 1 0 0

b.2) 将列名移动到一行中
有效的方法。

 #heterogeneous DataFrame creation
df = pd.DataFrame(np.random.randint(0,4,size=(4, 3)), columns=list('789')).join(
pd.DataFrame(list('bcde'),columns=['A']))
df.index.name = '4'

#save column as row then reindex column names
df = df.append(pd.Series( df.columns,name = df.index.name,index= df.columns ), )
df.columns = pd.RangeIndex(df.columns.size)
print (df)
print(df.info())

输出:注意 你需要额外的努力来防止所有数据的上升

   0  1  2  3
#-----------#
4
0 2 3 2 b
1 1 0 2 c
2 3 1 3 d
3 3 3 2 e
4 7 8 9 A

<class 'pandas.core.frame.DataFrame'>
Index: 5 entries, 0 to 4
Data columns (total 4 columns):
0 5 non-null object
1 5 non-null object
2 5 non-null object
3 5 non-null object
dtypes: object(4)

c) 添加二级列索引(一行)
可能会出现性能问题和副作用,请参阅下面的讨论。

df.T.set_index(pd.RangeIndex(df.columns.size),append=True).T

输出:

    A   B   C   D
0 1 2 3
#---------------#
0 0 1 3 3
1 2 2 0 2
2 2 1 3 1
3 2 1 0 0

一线方法批评

性能问题:
对于巨大的数据集,双 T 的成本可能是 Not Acceptable ,但在简单的情况下,返回 DataFrame 副本的一行可能很有用。查看测试结果

In [294]: for i in range (3,7):
...: df = pd.DataFrame(np.random.randint(0,9,size=(10**i, 10**3)))
...: print ('shape:',df.shape)
...: %timeit df.T.reset_index(drop=True)
...:
shape: (1000, 1000)
100 loops, best of 3: 3.2 ms per loop
shape: (10000, 1000)
10 loops, best of 3: 29.3 ms per loop
shape: (100000, 1000)
1 loop, best of 3: 546 ms per loop
shape: (1000000, 1000)
1 loop, best of 3: 9.9 s per loop

In [295]: %timeit df.columns = pd.RangeIndex(df.columns.size)
The slowest run took 28.60 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 7.74 µs per loop

副作用(向上转换):
异构数据帧将被向上转换

In [352]: df = pd.DataFrame(np.random.randint(0,4,size=(4, 3)), columns=list('789')).join(
...: pd.DataFrame(list('bcde'),columns=['A']))

In [353]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
7 4 non-null int64
8 4 non-null int64
9 4 non-null int64
A 4 non-null object
dtypes: int64(3), object(1)
memory usage: 208.0+ bytes

.T.T 向上转型

In [354]: df.T.T.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
7 4 non-null object
8 4 non-null object
9 4 non-null object
A 4 non-null object
dtypes: object(4)
memory usage: 208.0+ bytes

关于python - 是否有列的 reset_index,或将列标题移动到内部索引而将其索引位置保留为外部索引的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43665591/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com