gpt4 book ai didi

python - 如何重新配置​​ pandas 数据框?

转载 作者:行者123 更新时间:2023-12-01 00:56:45 27 4
gpt4 key购买 nike

我正在尝试重新配置 pandas 数据框,目前如下所示:

   A   B   C   D   E   F
0 7 5 2 1 2 2
1 3 4 3 1 4 6
2 1 3 2 6 5 5

变成这样:

   c1  c2  c3  
0 7 5 2
0 1 2 2
1 3 4 3
1 1 4 6
2 1 3 2
2 6 5 5

(尝试分割数据帧,然后将后一个切片作为新行放在下面 - c1、c2、c3 是新的列标签)

最佳答案

我相信这里有必要将值 reshape 为 3 列,只需对列长度取模 0:

print (len(df.columns) % 3)
0

df = pd.DataFrame(df.values.reshape(-1, 3),
columns=[f'c{x}' for x in range(1, 4)],
index = np.repeat(df.index, len(df.columns) / 3))
print (df)

c1 c2 c3
0 7 5 2
0 1 2 2
1 3 4 3
1 1 4 6
2 1 3 2
2 6 5 5

编辑:

我尝试模拟您的问题 - 添加了新列 G 并在 3 列中获取输出:

print (df)
A B C D E F G
0 7 5 2 1 2 2 10
1 3 4 3 1 4 6 20
2 1 3 2 6 5 5 30

如果需要输出中的所有值,则对于末尾的值添加 NaN,因为不存在:

N = 3
c = np.arange(len(df.columns))
df.columns = [c % N, c // N]

df = df.stack().reset_index(drop=True)
df.columns = [f'{x + 1}' for x in df.columns]
print (df)
1 2 3
0 7 5.0 2.0
1 1 2.0 2.0
2 10 NaN NaN
3 3 4.0 3.0
4 1 4.0 6.0
5 20 NaN NaN
6 1 3.0 2.0
7 6 5.0 5.0
8 30 NaN NaN

另一个想法是删除通过索引创建 NaN 的列 - 这里列 G:

N = 3
c = len(df.columns)
last = (c % N)

df = df.iloc[:, :-last]
print (df)
A B C D E F
0 7 5 2 1 2 2
1 3 4 3 1 4 6
2 1 3 2 6 5 5

然后使用原来的解决方案:

df = pd.DataFrame(df.values.reshape(-1, 3), 
columns=[f'c{x}' for x in range(1, 4)],
index = np.repeat(df.index, len(df.columns) / 3))
print (df)
c1 c2 c3
0 7 5 2
0 1 2 2
1 3 4 3
1 1 4 6
2 1 3 2
2 6 5 5

关于python - 如何重新配置​​ pandas 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56187378/

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