我的数据帧有许多(192)列。如何同时选择两列?

2024-10-01 15:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据帧就像df.columns= ['Time1','Pmpp1','Time2',..........,'Pmpp96']我想一次选择两个连续的列。例如,一次Time1Pmpp1。 我的代码是:

for i,j in zip(df.columns,df.columns[1:]):
    print(i,j)

我目前的产出是:

 Time1 Pmmp1
 Pmmp1 Time2
 Time2 Pmpp2

预期输出为:

 Time1 Pmmp1
 Time2 Pmpp2
 Time3 Pmpp3 

Tags: columns数据代码indfforzipprint
3条回答

您正在压缩列表,相同的列表从第二个元素开始,这不是您想要的。你想压缩你的列表中的不均匀索引和均匀索引。例如,可以将代码替换为:

for i, j in zip(df.columns[::2], df.columns[1::2]): print(i, j)

作为整数位置切片的替代方法,可以使用^{}创建2个索引对象。然后使用zip成对迭代:

df = pd.DataFrame(columns=['Time1', 'Pmpp1', 'Time2', 'Pmpp2', 'Time3', 'Pmpp3'])

times = df.columns[df.columns.str.startswith('Time')]
pmpps = df.columns[df.columns.str.startswith('Pmpp')]

for i, j in zip(times, pmpps):
    print(i, j)

Time1 Pmpp1
Time2 Pmpp2
Time3 Pmpp3

在这种情况下,重塑数据帧可能是有意义的。因此,您没有一次选择两列,而是有一个数据帧,其中两列最终表示您的度量。你知道吗

首先,创建一个数据帧列表,其中每个数据帧只有一个Time和Pmpp列:

dfs = []
for i in range(1,97):
    tmp = df[['Time{0}'.format(i),'Pmpp{0}'.format(i)]]
    tmp.columns = ['Time', 'Pmpp']  # Standardize column names
    tmp['n'] = i                    # Remember measurement number
    dfs.append(tmp)                 # Keep with our cleaned dataframes 

然后您可以将它们连接到一个新的数据帧中。它有三列。你知道吗

new_df = pd.concat(dfs, ignore_index=True, sort=False)

对于您的数据来说,这应该是一个更易于管理的形状。你知道吗

>>> new_df.columns
[n, Time, Pmpp]

现在,您可以遍历此数据帧中的行,并获得预期输出的

for i, row in new_df.iterrows():
    print(i, row.n, row.Time, row.Psmpp)

这也会让你更容易使用熊猫的其他部分来分析你的数据。你知道吗

new_df.Pmpp.mean()
new_df.describe()

相关问题 更多 >

    热门问题