Выровнять даты по альтернативным столбцам Pandas Dataframe - PullRequest
0 голосов
/ 04 мая 2018

У меня есть Pandas Dataframe, столбцы 1-3-5-7 ... содержат даты, столбцы 2-4-6-8- .. содержат значения данных. Даты в столбцах не соответствуют. Я хочу один столбец, содержащий все даты, а остальные столбцы, содержащие только значения Пример:

input

      date val1       date   val2        date val3 
2007-12-01 35.6  2007-12-05 101.1  2007-12-05 89.1
2007-12-02 36.7. 2007-12-06 102.3  2007-12-07 89.3
2007-12-05 36.7  2007-12-07 108.3. 2007-12-08 89.5
2007-12-06 36.9  2007-12-08 110.0  2007-12-09 89.3
2007-12-07 36.9. 2007-12-09 102.3  2007-12-12 89.9

output

      date   val1   val2   val3 
2007-12-01   35.6     na     na 
2007-12-02   36.7     na     na 
2007-12-05   36.7  101.1   89.1 
2007-12-06   36.9  102.3     na 
2007-12-07   36.9  108.3   89.3 
2007-12-08     na  110.0   89.5
2007-12-09     na  102.3   89.3
2007-12-12     na     na   89.9

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

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

df:
         date   val1      date.1    val2      date.2  val3
0  2007-12-01   35.6  2007-12-05   101.1  2007-12-05  89.1
1  2007-12-02  36.7.  2007-12-06   102.3  2007-12-07  89.3
2  2007-12-05   36.7  2007-12-07  108.3.  2007-12-08  89.5
3  2007-12-06   36.9  2007-12-08   110.0  2007-12-09  89.3
4  2007-12-07  36.9.  2007-12-09   102.3  2007-12-12  89.9

for index, i in enumerate(xrange(0,len(df.columns),2)):
    col = df.columns[i]
    name = 'df' + str(index)
    name = df.iloc[:,i:i+2]
    if index == 0:
        dft = name
    name.columns = ['date', ('value' + str(i/2+1))]
    if index !=0:
        dft = dft.merge(name, on='date', how='outer')
print dft

Выход:

         date value1  value2  value3
0  2007-12-01   35.6     NaN     NaN
1  2007-12-02  36.7.     NaN     NaN
2  2007-12-05   36.7   101.1    89.1
3  2007-12-06   36.9   102.3     NaN
4  2007-12-07  36.9.  108.3.    89.3
5  2007-12-08    NaN   110.0    89.5
6  2007-12-09    NaN   102.3    89.3
7  2007-12-12    NaN     NaN    89.9
0 голосов
/ 04 мая 2018

Вы можете итеративно объединить все несколько столбцов в новый пустой фрейм данных.

dft = pd.DataFrame({"date": []})
N = len(df.columns)
for n in range(N // 2):
    dft = dft.merge(df.iloc[:, 2*n:2*(n+1)], on='date', how='outer')

Обратите внимание, что мы определяем пустую дату столбца, чтобы объединить ее в первой итерации. Клавиша 'outer' говорит о том, что все значения, поступающие как из левого (начального), так и правого (объединенного) фрейма данных, должны быть сохранены, а nans добавлено при необходимости. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...