我有一个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]
只要日期保持不变,索引就不重要了。我找到了一个解决方案,将每个条目转换为一个列,但这不完全是我想要的。
答案 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)