3

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

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 
4

4 回答 4

5

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

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

于 2018-08-27T11:42:00.567 回答
1

作为整数位置切片的替代方法,您可以使用str.startswith创建 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
于 2018-08-27T12:05:38.890 回答
0

在这种情况下,重塑 DataFrame 可能是有意义的。因此,您不必一次选择两列,而是有一个 DataFrame,其中两列最终代表您的测量值。

首先,您制作一个 DataFrame 列表,其中每个只有一个 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 

然后你可以将它们连接到一个新的 DataFrame 中。那有三列。

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

对于您的数据,这应该是一个更易于管理的形状。

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

现在您可以遍历此 DataFrame 中的行并获取预期输出的

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

它还将使使用其余的 pandas 来分析您的数据变得更加容易。

new_df.Pmpp.mean()
new_df.describe()
于 2018-08-27T12:04:39.950 回答
0

经过一系列的尝试,我得到了它。我的代码如下:

for a in range(0,len(df.columns),2):
    print(df.columns[a],df.columns[a+1]) 

我的输出是:

DateTime   A016.Pmp_ref
DateTime.1 A024.Pmp_ref
DateTime.2 A040.Pmp_ref
DateTime.3 A048.Pmp_ref
DateTime.4 A056.Pmp_ref
DateTime.5 A064.Pmp_ref
DateTime.6 A072.Pmp_ref
DateTime.7 A080.Pmp_ref
DateTime.8 A096.Pmp_ref
DateTime.9 A120.Pmp_ref
DateTime.10 A124.Pmp_ref
DateTime.11 A128.Pmp_ref
于 2018-08-27T12:19:11.637 回答