Мой фрейм данных имеет много (192) столбцов.Как выбрать два столбца одновременно? - PullRequest
0 голосов
/ 27 августа 2018

Мой фрейм данных похож на 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 ]

0 голосов
/ 27 августа 2018

После серии испытаний я понял. Мой код указан ниже:

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
0 голосов
/ 27 августа 2018

В этом случае может иметь смысл изменить форму вашего DataFrame. Таким образом, вместо выбора двух столбцов за раз, у вас есть DataFrame с двумя столбцами, которые в конечном итоге представляют ваши измерения.

Сначала вы создаете список DataFrames, где у каждого есть только столбец 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)

Это также облегчит использование остальных панд для анализа ваших данных.

new_df.Pmpp.mean()
new_df.describe()
0 голосов
/ 27 августа 2018

В качестве альтернативы целочисленной позиционной нарезке вы можете использовать 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
0 голосов
/ 27 августа 2018

Вы проникаете в список, и тот же список, начиная со второго элемента, а это не то, что вы хотите. Вы хотите застегнуть неровности и даже индексы вашего списка. Например, вы можете заменить свой код на:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...