2017-02-01 6 views
1

Таким образом, у меня есть файл 500 столбцов на 600 строк и хочет взять среднее значение всех столбцов для строк 200-400:Как сохранить индексы панды при извлечении столбцов

df = pd.read_csv('file.csv', sep= '\s+') 
sliced_df=df.iloc[200:400] 

Затем создайте новый столбец из средние значения всех строк по всем столбцам. И извлекать только что вновь созданный столбец:

sliced_df['mean'] = sliced_df.mean(axis=1) 
final_df = sliced_df['mean'] 

Но как я могу предотвратить индексы от сброса, когда я достаю новый столбец? Функция

ответ

1

Я думаю, что не нужно создавать новый столбец в sliced_df, только rename имя Series и если выход потребность в DataFrame добавить to_frame. Индексы не сброса см образец ниже:

#random dataframe 
np.random.seed(100) 
df = pd.DataFrame(np.random.randint(10, size=(5,5)), columns=list('ABCDE')) 
print (df) 
    A B C D E 
0 8 8 3 7 7 
1 0 4 2 5 2 
2 2 2 1 0 8 
3 4 0 9 6 2 
4 4 1 5 3 4 

#in real data use df.iloc[200:400] 
sliced_df=df.iloc[2:4] 
print (sliced_df) 
    A B C D E 
2 2 2 1 0 8 
3 4 0 9 6 2 

final_ser = sliced_df.mean(axis=1).rename('mean') 
print (final_ser) 
2 2.6 
3 4.2 
Name: mean, dtype: float64 

final_df = sliced_df.mean(axis=1).rename('mean').to_frame() 
print (final_df) 
    mean 
2 2.6 
3 4.2 

Python отсчитывает от 0, поэтому, возможно, потребуется кусок изменения от 200:400 до 100:300 см разницы:

sliced_df=df.iloc[1:3] 
print (sliced_df) 
    A B C D E 
1 0 4 2 5 2 
2 2 2 1 0 8 

final_ser = sliced_df.mean(axis=1).rename('mean') 
print (final_ser) 
1 2.6 
2 2.6 
Name: mean, dtype: float64 

final_df = sliced_df.mean(axis=1).rename('mean').to_frame() 
print (final_df) 
    mean 
1 2.6 
2 2.6 
+0

Это ответ на мой взгляд. – piRSquared

+0

@piRSquared - Спасибо. – jezrael

+0

OMG ... моя жена будет волноваться. Было холодно, как -5 в течение недели. Теперь его около 0 до 10. – piRSquared

0

Использование копии() следующим образом:

df = pd.read_csv('file.csv', sep= '\s+') 
sliced_df=df.iloc[200:400].copy() 
sliced_df['mean'] = sliced_df.mean(axis=1) 
final_df = sliced_df['mean'].copy() 
Смежные вопросы