2015-07-23 7 views
1

Я пытаюсь работать с Pandas, и мне нужно решение для следующей проблемы.Python pandas итерации через dataframe

У меня есть набор данных с колоннами, которые выглядят так:

X1 Y1 Z1 1.....(bunch of other columns) 
X1 Y1 Z1 2.....(bunch of other columns) 
X1 Y1 Z1 3.....(bunch of other columns) 
X2 Y2 Z2 1.....(bunch of other columns) 
X2 Y2 Z2 2.....(bunch of other columns) 
X2 Y2 Z2 3.....(bunch of other columns) 
X2 Y2 Z2 4.....(bunch of other columns) 

Мне нужно обработать набор данных, рассматривая первые три столбца в качестве ключа. Поэтому мне нужно сначала рассмотреть все строки, связанные с X1 Y1 Z1, обработать кучу столбцов в этом, а затем перейти к следующему фрагменту X2 Y2 Z2. Таким образом, первый его

X1 Y1 Z1 1.....(bunch of other columns) 
X1 Y1 Z1 2.....(bunch of other columns) 
X1 Y1 Z1 3.....(bunch of other columns) 

следует

X2 Y2 Z2 1.....(bunch of other columns) 
X2 Y2 Z2 2.....(bunch of other columns) 
X2 Y2 Z2 3.....(bunch of other columns) 
X2 Y2 Z2 4.....(bunch of other columns) 

Я ищу решение в пандах или NumPy для обработки этого набора данных. И я имею дело с миллионами строк, поэтому pandas iterrows() будет медленным.

ответ

1

Если данные загружаются в DataFrame df с колоннами X, Y, Z, col1, col2 ...., то вы могли бы перебираем «группы»/«куски» из данных ниже:

for concat_XYZ, df_group in df.groupby(df['X']+df['Y']+df['Z']): 
    # process df_group 
    # .... 

Каждый df_group представляет собой кусок (или сам DataFrame) по вашему желанию. Конкатенация строк в столбцах X, Y и Z используется для однозначной идентификации группы.

+0

'df_group' содержит оригинальный dataframe, который выглядит перепутались –

+0

' df_group' будет кортеж из 2-х элементов. Первый элемент - это конкатенированная строка столбцов 'X',' Y' и 'Z'. Второй элемент - это подгруппа/фрагмент, который вы хотите обработать. Отредактировал ответ, чтобы разделить два элемента в строке 'for'. – vk1011

+0

'concat_XYZ' теперь является строкой типа' X1Y2Z2', а 'df_group' теперь является процессом DataFrame/chunk. – vk1011

1

Если ваша обработка идентична, но вам нужно разделить их по группам, затем напишите свою функцию и используйте groupby.apply(), она вернет DataFrame после применения вашей группы функций.

def do_stuff(DataFrame): 
    DataFrame['stuff'] = DataFrame['col1'] + DataFrame['col2'] + DataFrame['col3'] 
    return DataFrame 

new_df = original_df.groupby(['col1', 'col2', 'col3'], as_index=False).apply(do_stuff)  
Смежные вопросы