2015-02-05 2 views
0

Я искал несколько книг и сайтов, и я не могу найти ничего, что вполне соответствует тому, что я пытаюсь сделать. Я хотел бы создать перечни из dataframe и перенастроить данные следующим образом:Python Pandas Dataframe: использование значений в столбце для создания новых столбцов

 A  B    A  B  C  D 
0  1  aa   0 1  aa 
1  2  bb   1 2  bb 
2  3  bb   2 3  bb aa 
3  3  aa  --\ 3 4  aa bb dd 
4  4  aa  --/ 4 5  cc 
5  4  bb 
6  4  dd 
7  5  cc 

Я никогда экспериментировал с группировкой, укладки, Расшахтовочное и т.д., но ничего, что я пытался произвел желаемый результат. Если это не очевидно, я очень новичок в python, и решение будет замечательным, но понимание процесса, которое мне нужно, будет идеальным.

Заранее спасибо

ответ

0

Использование панд вы можете запросить все результаты, например, где A = 4.

Грубым, но работающим методом было бы перебирать различные значения индекса и собирать все «похожие» результаты в массив numpy и преобразовывать его в новый фреймворк данных.

псевдокод, чтобы продемонстрировать свой пример: (будет нужно переписывать на самом деле работа)

l= [0]*df['A'].max() 
for item in xrange(df['A'].max()): 
    l[item] = df.loc[df['A'].isin(item)] 

df = pd.DataFrame(l) 
# or something of the sort 

Я надеюсь, что помогает.

Обновление от комментариев:

animal_list=[] 

for animal in ['cat','dog'...]: 
    newdf=df[[x.is('%s'%animal) for x in df['A']]] 

    body=[animal]  
    for item in newdf['B'] 
     body.append(item) 

    animal_list.append(body) 

df=pandas.DataFrame(animal_list) 
+0

благодаря user2589273 ... Я боюсь, что я не был достаточно конкретным в моем примере. Реальные данные в обоих столбцах состоят из строк, и когда я пытаюсь это сделать, он жалуется на попытку умножения строк. Чтобы помочь мне понять, что делает первая линия? – Velcro

+0

попробуйте df = df.convert_objects (convert_numeric = True), чтобы преобразовать строки в поплавки для вашего фрейма данных. Или более конкретно df ['A'] = df ['A']. Convert_objects (convert_numeric = True). Моя первая строка создает пустой массив нулей, так как я не знаю, являются ли значения последовательными или имеют пробелы ... – user2589273

+0

Также я понял, что мое использование max скорее всего будет неправильным - теперь отредактируйте ответ – user2589273

0

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

data = {'A': [1, 2, 3, 3, 4, 4, 4, 5], 
     'B': ['aa', 'bb', 'bb', 'aa', 'aa', 'bb', 'dd', 'cc']} 
df = pd.DataFrame(data) 

maxlen = df.A.value_counts().values[0] # this helps with creating 
            # lists of same size 

newdata = {} 
for n, gdf in df.groupby('A'): 
    newdata[n]= list(gdf.B.values) + [''] * (maxlen - len(gdf.B)) 

# recreate DF with Col 'A' as index; experiment with other orientations 
newdf = pd.DataFrame.from_dict(newdict, orient='index') 

# customize this section 
newdf.columns = list('BCD') 
newdf['A'] = newdf.index 
newdf.index = range(len(newdf)) 
newdf = newdf.reindex_axis(list('ABCD'), axis=1) # to set the desired order 

print newdf 

Результат:

 
    A B C D 
0 1 aa   
1 2 bb   
2 3 bb aa  
3 4 aa bb dd 
4 5 cc   
Смежные вопросы