gpt4 book ai didi

python - 使用来自单独文件的整数对 Pandas 数据框中的列进行分组

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:12 25 4
gpt4 key购买 nike

我想在一个文件中使用整数来相应地命名另一个文件中的列。例如:

文件 1

3 2 3 3 3 2

文件 2

0.2 0.0 0.0 1.0 0.98 0.98 0.02 0.02 0.97 
0.4 0.4 0.3 2.0 0.30 0.03 0.30 0.93 0.39

File1 中的第一个整数是 3,因此在 File2 中,我想将前三列(第 0 列之后)指定为 0_1、0_2、0_3。 File1 中的第二个整数是 2,因此 File2 中接下来的两列将指定为 1_1, 1_2

预期的输出是:

  time  0_1  0_2  0_3   1_1   1_2   2_1   2_2   2_3   
0.2 0.0 0.0 1.0 0.98 0.98 0.02 0.02 0.97
0.4 0.4 0.3 2.0 0.30 0.03 0.30 0.93 0.39

当我按以下方式分配索引时,我最终得到的列编号相同 - 有没有办法可以实现所需的输出?

import pandas as pd
import numpy as np
import sys

file1 = "nsubs"
new = ['time']

file2 = sys.argv[1]

df = pd.read_csv(file1, sep=" ", header=None)
num = df.iloc[0].values.tolist()
for idx, item in enumerate(num):
if item == 3:
new.append(idx)
new.append(idx[2])
new.append(idx)
else:
new.append(idx)
new.append(idx)

df2 = pd.read_csv(file2, sep=" ", header=None)
df2.columns = [new]

实际输出:

  time    0    0    0     1     1     2     2     2 
0.2 0.0 0.0 1.0 0.98 0.98 0.02 0.02 0.97
0.4 0.4 0.3 2.0 0.30 0.03 0.30 0.93 0.39

最佳答案

根据您拥有的数据,您实际上不需要 pandas 作为列标题。您可以将它们读入列表并对它们执行列表理解以获取标题。

读入文本文件,使用split函数将它们分开,然后转换为整数

with open('file1.txt', 'r') as f:
column_counts = [int(i) for i in f.read().split()]
# [3, 2, 3, 3, 3, 2]

然后你只需要创建一个简单的循环。使用 enumerate() 来计算集合的数量,并使用值对接下来的几列进行子集化。 for 循环用于演示,但我建议使用列表理解。

colums = ['time']
for i, n in enumerate(column_counts):
for j in range(1, n+1):
columns.append("{}_{}".format(i, j))

columns = ['time'] + ["{}_{}".format(i, j) for i, n in enumerate(column_counts) for j in range(1, n+1)]
#['time', '0_1', '0_2', '0_3', '1_1', '1_2', '2_1', '2_2', '2_3', '3_1', '3_2', '3_3', '4_1', '4_2', '4_3', '5_1', '5_2']

在您的示例中,file1 生成的列列表比 file2 长得多,因此一旦我知道数据框需要多少列,我就必须将它们切掉。如果您的数据匹配它们,那么您可以在创建数据框时使用 columns=columns

df = pd.read_csv('file2.txt', sep=" ", header=None)
df.columns = columns[:len(df.columns)]
df.set_index('time', inplace=True)

print(df)
# 0_1 0_2 0_3 1_1 1_2 2_1 2_2 2_3
# time
# 0.2 0.0 0.0 1.0 0.98 0.98 0.02 0.02 0.97
# 0.4 0.4 0.3 2.0 0.30 0.03 0.30 0.93 0.39

关于python - 使用来自单独文件的整数对 Pandas 数据框中的列进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55753563/

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