我的数据框就像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
答案 0 :(得分:5)
您正在压缩列表,并且从第二个元素开始是相同的列表,这不是您想要的。您想压缩列表中不均匀甚至均匀的索引。例如,您可以将代码替换为:
for i, j in zip(df.columns[::2], df.columns[1::2]):
print(i, j)
答案 1 :(得分: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
答案 2 :(得分:0)
在这种情况下,重塑DataFrame可能很有意义。因此,您不必再一次选择两列,而是拥有一个带有最终代表您的测量值的两列的DataFrame。
首先,创建一个DataFrames列表,其中每个DataFrames只有一个“ Time and 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)
这也将使使用其余熊猫来分析数据更加容易。
new_df.Pmpp.mean()
new_df.describe()
答案 3 :(得分: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