Объединить два столбца одинаковой длины в один - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть пандас DataFrame, содержащий несколько столбцов.То, что я пытаюсь сделать, это объединить / сложить значения двух столбцов в один столбец, укладывая значения каждого столбца одну строку за другой (к сожалению, это требование не позволяет мне использовать решение, подобное объединению).Содержимое других оставшихся столбцов может быть просто дублировано.Любая помощь очень ценится

#Current DataFrame
print(df)
Stock Ticker    Index Ticker    Price   Date
AAPL            INDX            100     12/31/2018 8:57  
GOOG            RSL             123     12/31/2018 8:57
GM              COMP            90      12/31/2018 8:57
MMM             NIKK            340     12/31/2018 8:57
INVD            EUR             30      12/31/2018 8:57 

#Desired results
print(df2)
Stock and Bench   Price   Date
AAPL              100     12/31/2018 8:57
INDX              100     12/31/2018 8:57
GOOG              123     12/31/2018 8:57
RSL               123     12/31/2018 8:57
GM                90      12/31/2018 8:57
COMP              90      12/31/2018 8:57
MMM               340     12/31/2018 8:57
NIKK              340     12/31/2018 8:57
INVD              30      12/31/2018 8:57
EUR               30      12/31/2018 8:57

Ответы [ 2 ]

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

Можно использовать pd.melt, настройку Date и Price в качестве id_vars:

(df.melt(id_vars=['Date', 'Price'], 
         value_name='Stock and Bench')
         .drop('variable', axis=1))

         Date        Price     Stock and Bench
0  12/31/2018/8:57    100            AAPL
1  12/31/2018/8:57    123            GOOG
2  12/31/2018/8:57     90              GM
3  12/31/2018/8:57    340             MMM
4  12/31/2018/8:57     30            INVD
5  12/31/2018/8:57    100            INDX
6  12/31/2018/8:57    123             RSL
7  12/31/2018/8:57     90            COMP
8  12/31/2018/8:57    340            NIKK
9  12/31/2018/8:57     30             EUR

или с использованием pd.wide_to_long:

(pd.wide_to_long(df.reset_index(), stubnames='Ticker', i = 'index', 
                j = 'num', suffix='\w+')
                .reset_index(drop=True)
                .rename({'Ticker':'Stock and Bench'}, axis=1))

        Date         Price Stock and Bench
0  12/31/2018-8:57    100   AAPL
1  12/31/2018-8:57    123   GOOG
2  12/31/2018-8:57     90     GM
3  12/31/2018-8:57    340    MMM
4  12/31/2018-8:57     30   INVD
5  12/31/2018-8:57    100   INDX
6  12/31/2018-8:57    123    RSL
7  12/31/2018-8:57     90   COMP
8  12/31/2018-8:57    340   NIKK
9  12/31/2018-8:57     30    EUR
0 голосов
/ 31 декабря 2018

Вы можете установить столбцы цены и даты в качестве индекса и составить акцию и тикер.Наконец, некоторые очищаются с помощью reset_index.

df.set_index(['Date', 'Price'])[['Stock Ticker','Index Ticker']].stack()\
.reset_index(2,drop = True).reset_index(name = 'Stock and Bench')


    Date    Price   Stock and Bench
0   12/31/2018 8:57 100 AAPL
1   12/31/2018 8:57 100 INDX
2   12/31/2018 8:57 123 GOOG
3   12/31/2018 8:57 123 RSL
4   12/31/2018 8:57 90  GM
5   12/31/2018 8:57 90  COMP
6   12/31/2018 8:57 340 MMM
7   12/31/2018 8:57 340 NIKK
8   12/31/2018 8:57 30  INVD
9   12/31/2018 8:57 30  EUR
...