2

嗨,我有下表并希望对其进行重塑:

嗨,我在 Pandas 数据框中有下表:

    q_string    q_visits    q_date
0   nucleus         1790        2012-10-02 00:00:00
1   neuron          364         2012-10-02 00:00:00
2   current         280         2012-10-02 00:00:00
3   molecular       259         2012-10-02 00:00:00
4   stem            201         2012-10-02 00:00:00

我想将 q_date 作为列标题,将 q_string 作为行标签,并在相交的单元格中放置 q_visits。

在 Pandas/Python 中执行此操作的最佳方法是什么?

4

2 回答 2

5

这是一个典型的例子pivot_table

>>> df.pivot_table(values='q_visits', cols='q_date', rows='q_string')
q_date     2012-10-02 00:00:00
q_string                      
current                    280
molecular                  259
neuron                     364
nucleus                   1790
stem                       201
于 2013-09-21T13:34:20.213 回答
0

pivot_table 有效,但为了便于阅读,我使用了速记版本。

data = [['nucleus', 1790, '2012-10-01 00:00:00'], 
    ['neuron', 364, '2012-10-02 00:00:00'], 
    ['current', 280, '2012-10-02 00:00:00'],
    ['molecular', 259, '2012-10-02 00:00:00'], 
    ['stem', 201, '2012-10-02 00:00:00']]
df = pd.DataFrame(data, columns=['q_string', 'q_visits', 'q_date'])

    q_string  q_visits               q_date
0    nucleus      1790  2012-10-01 00:00:00
1     neuron       364  2012-10-02 00:00:00
2    current       280  2012-10-02 00:00:00
3  molecular       259  2012-10-02 00:00:00
4       stem       201  2012-10-02 00:00:00

将 q_string 和 q_date 都分配给索引:

df.set_index(['q_string', 'q_date'], inplace=True)

索引现在看起来像这样:

MultiIndex(levels=[['current', 'molecular', 'neuron', 'nucleus', 'stem'], 
                   ['2012-10-01 00:00:00', '2012-10-02 00:00:00']],
           labels=[[3, 2, 0, 1, 4], [0, 1, 1, 1, 1]],
           names=['q_string', 'q_date'])`

q_string 和 q_date 都是日期的索引,我们只需 unstack() 将 q_date 放入列中。

df.unstack()

                    q_visits                   
q_date    2012-10-01 00:00:00 2012-10-02 00:00:00
q_string                                         
current                   NaN               280.0
molecular                 NaN               259.0
neuron                    NaN               364.0
nucleus                1790.0                 NaN
stem                      NaN               201.0
于 2017-07-17T20:36:08.007 回答