numpy数组的元素作为拥有相同索引的自有pandas行

时间:2018-01-25 13:31:26

标签: python pandas numpy

我有一个pandas DataFrame,numpy数组作为列中的值。我想将每个元素转换为具有相同日期的行:

我的DataFrame看起来像这样:

    date    website+
0       2014-11-26  [A]
238     2015-12-20  [B, C]
297     2016-02-17  [D]
303     2016-02-23  [E, F, G]

我想要:

       date     website+
    0       2014-11-26  [A]
    238     2015-12-20  [B]
            2015-12-20  [C]
    297     2016-02-17  [D]
    303     2016-02-23  [E]
            2016-02-23  [F]
            2016-02-23  [G]

只要日期保持不变,索引就不重要了。我找到了一个解决方案,将每个条目转换为一个列,但这不完全是我想要的。

2 个答案:

答案 0 :(得分:1)

如果您的第一列已经在索引中,那么您可以使用以下内容:

df.set_index('date', append=True)['website+']\
  .apply(pd.Series).stack().reset_index(level=-1, drop=True)\
  .to_frame(name='website+')

输出:

               website+
    date               
0   2014-11-26        A
238 2015-12-20        B
    2015-12-20        C
297 2016-02-17        D
303 2016-02-23        E
    2016-02-23        F
    2016-02-23        G

答案 1 :(得分:0)

另一种解决方案

\S+@\S+

输出:

import pandas as pd

df = pd.DataFrame({u'date': ['2014-11-26', '2015-12-20', '2016-02-17','2016-02-23'],
 u'website+': [['A'], ['B','C'], ['D'],['E','F','G'] ]})

print (df)

def expand(row):
    ws = row['website+'] if isinstance(row['website+'], list) else [row['website+']]
    s = pd.Series(row['date'], index=list(set(ws)))
    return s

df1 = df.apply(expand, axis=1).stack()   

print (df1)