gpt4 book ai didi

python - 通过拆分索引名称将 1D pandas DataFrame 重新排列为 2d

转载 作者:行者123 更新时间:2023-11-28 21:33:36 29 4
gpt4 key购买 nike

我有一个 1D DataFrame,它使用 i_n 形式的键进行索引,其中 in 是字符串(为了本例中,i 是一个整数,n 是一个字符)。这将是一个简单的例子:

       values
0_a 0.583772
1_a 0.782358
2_a 0.766844
3_a 0.072565
4_a 0.576667
0_b 0.503876
1_b 0.352815
2_b 0.512834
3_b 0.070908
4_b 0.074875
0_c 0.361226
1_c 0.526089
2_c 0.299183
3_c 0.895878
4_c 0.874512

现在我想将这个 DataFrame 重新安排为 2D,这样数字(下划线之前的索引名称部分)用作列名,字符(下划线之后的索引部分)用作索引:

          0         1         2          3          4
a 0.583772 0.782358 0.766844 0.0725654 0.576667
b 0.503876 0.352815 0.512834 0.0709081 0.0748752
c 0.361226 0.526089 0.299183 0.895878 0.874512

我有一个解决问题的方法(下面的函数 convert_2d),但我想知道是否有更惯用的方法来实现这一点。这是用于生成原始 DataFrame 并将其转换为所需形式的代码:

import pandas as pd
import numpy as np

def convert_2d(df):
df2 = pd.DataFrame(columns=['a','b','c'], index=list(range(5))).T

names = set(idx.split('_')[1] for idx in df.index)
numbers = set(idx.split('_')[0] for idx in df.index)

for i in numbers:
for n in names:
df2[i][n] = df['values']['{}_{}'.format(i,n)]

return df2



##generating 1d example data:
data = np.random.rand(15)
indices = ['{}_{}'.format(i,n) for n in ['a','b','c'] for i in range(5)]
df = pd.DataFrame(
data, columns=['values']
).rename(index={i:idx for i,idx in enumerate(indices)})

print(df)

##converting to 2d
print(convert_2d(df))

关于索引键的一些注意事项:可以假设(就像在我的函数中一样)没有“丢失的键”(即总是可以实现二维数组)并且唯一可以认为是理所当然的关于keys 是(单个)下划线(即数字和字母只是出于解释原因而选择的,实际上只有两个任意字符串由下划线连接)。

最佳答案

IIUC 创建多重索引然后unstack

df.index=pd.MultiIndex.from_tuples(df.index.str.split('_').map(tuple))
df['values'].unstack(level=0)
Out[65]:

0 1 2 3 4
a 0.583772 0.782358 0.766844 0.072565 0.576667
b 0.503876 0.352815 0.512834 0.070908 0.074875
c 0.361226 0.526089 0.299183 0.895878 0.874512

关于python - 通过拆分索引名称将 1D pandas DataFrame 重新排列为 2d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54482710/

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