Исправить дубликаты имен индексов в кадре данных - PullRequest
0 голосов
/ 10 сентября 2018

Я ищу простейшее решение для создания фрейма данных Python из CSV-файла с дублирующимися именами индексов (s1 и s2 в примере ниже).

Вот как выглядит CSV-файл:

       var1   var2    var3
unit x    8      4      12
temp y   -1     -4      -3
time     
s1        9     12      11
s2       12     15       7
month    
s1        1      3      12 
s2        2      4       6

Фрейм данных Python должен выглядеть следующим образом:

        var1   var2    var3
unit x     8      4      12
temp y    -1     -4      -3
time s1    9     12      11
time s2   12     15       7
month s1   1      3      12
month s2   2      4       6

Как лучше всего выполнить эту операцию?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

считается датафреймом

        C   D   E
A   B           
a   4   7.0 1.0 5.0
5   3.0 4.0 5.5
b   5   8.0 3.0 3.0
c   4   9.0 5.0 6.0
f   4   3.0 0.0 4.0

вы можете использовать df.reset_index drop is False, который может сделать количество столбцов на основе уровней индекса, после чего вы можете назначить основному индексу после его конвертации

#converting index to columns
df = df1.reset_index()
# Assigning multilevel index columns to main index
df.index = df[df.columns[0]].astype(str)+' '+df[df.columns[1]].astype(str)
# dropping the indexed columns
df = df.drop(df.columns[[0,1]],axis=1)

Из:

    C   D   E
a 4 7.0 1.0 5.0
a 5 3.0 4.0 5.5
b 5 8.0 3.0 3.0
c 4 9.0 5.0 6.0
f 4 3.0 0.0 4.0
0 голосов
/ 10 сентября 2018

Использование:

#convert index to Series
s = df.index.to_series()
#identify duplicated values
m = s.duplicated(keep=False)
#replace dupes by NaNs and then by forward filling
df.index = np.where(m, s.mask(m).ffill() + ' ' + s.index, s)
#remove only NaNs rows
df = df.dropna(how='all')
print (df)
          var1  var2  var3
unit x     8.0   4.0  12.0
temp y    -1.0  -4.0  -3.0
time s1    9.0  12.0  11.0
time s2   12.0  15.0   7.0
month s1   1.0   3.0  12.0
month s2   2.0   4.0   6.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...