Нарезка объединенного кадра данных в пандах - PullRequest
1 голос
/ 15 мая 2019

Я создал фрейм данных, импортируя несколько текстовых файлов и объединяя их в один фрейм данных, используя следующий код:

list=[]
for filename in allfiles:
    df = pd.read_csv(filename, index_col=None, header=0,delim_whitespace=True, skipfooter = 1,engine='python')
    list.append(df)

dat = pd.concat(list, axis=0, keys=range(0,len(allfiles))

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

Я попытался нарезать данные dataframe с помощью .loc () и .iloc () следующим образом:

dat.iloc[:,2,n]

, но он говоритчто индексов недостаточно.

Вот краткий пример для dat:

|   |   | a   | b   | c   |  
|---|---|-----|-----|-----|  
| 0 | 0 | 0.1 | 5.3 | 7.2 |  
|   | 1 | 3.2 | 2.5 | 5.4 |  
|   | 2 | 0.3 | 0.5 | 6.2 |  
| 1 | 0 | 6.7 | 4.5 | 7.2 |  
|   | 1 | 9.4 | 6.3 | 5.7 |  
|   | 2 | 6.4 | 4.5 | 6.7 |  
| 2 | 0 | 3.4 | 5.6 | 0.5 |  
|   | 1 | 1.9 | 0.3 | 1.2 |  
|   | 2 | 0.4 | 0.7 | 2.6 |

В конце я хотел бы получить массивы вида:
l_1 = [5.3, 4.5,5.6], l_2 = [2.5,6.3,0.3], L_3 = [0.5,4.5,0.7] * * 1 023

1 Ответ

2 голосов
/ 16 мая 2019
df.groupby(level = 1)['b'].apply(list)

0    [5.3, 4.5, 5.6]
1    [2.5, 6.3, 0.3]
2    [0.5, 4.5, 0.7]

Вы можете сгруппировать по уровню вашего индекса 1, затем посмотреть на столбец 'b' и составить их списки.

...