Добавление 3 повторяющихся столбца в конец моего фрейма данных - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть данные в следующем формате:

       0        1         2         3        4         5         6    
0  09.08.00  31.6875 -0.017442  17.10.00  59.1250  0.002119  24.10.00 ...  
1  10.08.00  31.7031  0.000492  18.10.00  59.1250  0.000000  25.10.00 ...
2  11.08.00  31.7656  0.001971  19.10.00  59.3125  0.003171  26.10.00 ...  
3  14.08.00  31.5625 -0.006394  20.10.00  59.5625  0.004215  27.10.00 ...  
4  15.08.00  31.5000 -0.001980  23.10.00  59.1250 -0.007345  30.10.00 ...  

       413       414     415       416  
0   0.004704  01.05.18  133.48 -0.034991  ......  
1  -0.001725  02.05.18  138.58  0.038208  ...... 
2  0.000247  03.05.18  141.56  0.021504   ......
3  0.000987  04.05.18  139.76 -0.012715   ......
4  0.000493  07.05.18  139.63 -0.000930   .......

Как видите, данные разбиты на 3 столбца для нескольких групп (в данном случае тикеры).Более того, данные, которые я имею, записываются за разное время.Например, первая группа может иметь данные за 100 дней, вторая - только 25 и так далее.Это означает, что у нас разное количество строк с записями данных для каждой группы.

Я бы хотел, чтобы в конечном фрейме данных было 3 столбца вместо 416. Поэтому я думал о том, чтобы как-то добавлять 3 столбца за раз ксуществующий фрейм данных.Таким образом, конечный результат должен выглядеть следующим образом:

       0        1         2              
0  09.08.00  31.6875 -0.017442  
1  10.08.00  31.7031  0.000492  
2  11.08.00  31.7656  0.001971  
3  14.08.00  31.5625 -0.006394    
4  15.08.00  31.5000 -0.001980
5  17.10.00  59.1250  0.002119  
6  18.10.00  59.1250  0.000000  
7  19.10.00  59.3125  0.003171  
8  20.10.00  59.5625  0.004215  
9  23.10.00  59.1250 -0.007345

Надеюсь, этот вопрос достаточно ясен.Как бы я занялся программированием этого с использованием панд и т. Д. На Python?Заранее благодарим за ваши ответы

С уважением,

Илия

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Короткая альтернатива с функциями pd.concat + np.split (без изменения исходного кадра данных df):

f = lambda df: df.T.reset_index(drop=True).T
new_df = pd.concat(map(f, np.split(df, range(3, df.columns.size, 3), axis=1)), ignore_index=True)
0 голосов
/ 08 декабря 2018

Используйте stack с многоиндексным созданием по модулю и целочисленному делению:

a = np.arange(len(df.columns))
df.columns = [a % 3, a // 3]
df = df.stack().sort_index(level=1).reset_index(drop=True)
print (df)
          0        1         2
0  09.08.00  31.6875 -0.017442
1  10.08.00  31.7031  0.000492
2  11.08.00  31.7656  0.001971
3  14.08.00  31.5625 -0.006394
4  15.08.00  31.5000 -0.001980
5  17.10.00  59.1250  0.002119
6  18.10.00  59.1250  0.000000
7  19.10.00  59.3125  0.003171
8  20.10.00  59.5625  0.004215
9  23.10.00  59.1250 -0.007345

Возможно числовое решение, но поскольку есть несколько строк, последнее необходимо преобразовать в floatс:

a = np.reshape(df.values,(len(df), -1, 3)).swapaxes(0,1).reshape(-1, 3)
df = pd.DataFrame(a)
df[[1,2]] = df[[1,2]].astype(float)
print (df)
          0        1         2
0  09.08.00  31.6875 -0.017442
1  10.08.00  31.7031  0.000492
2  11.08.00  31.7656  0.001971
3  14.08.00  31.5625 -0.006394
4  15.08.00  31.5000 -0.001980
5  17.10.00  59.1250  0.002119
6  18.10.00  59.1250  0.000000
7  19.10.00  59.3125  0.003171
8  20.10.00  59.5625  0.004215
9  23.10.00  59.1250 -0.007345
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...