我们说我有这样的事情:
df = pd.DataFrame({'key':[1,2,3], 'type':[[1,3],[1,2,3],[1,2]], 'value':[5,1,8]})
key type value
1 [1, 3] 5
2 [1, 2, 3] 1
3 [1] 8
其中一列包含项目列表。 我想为包含多种类型的每一行创建几行。
坚持这个:
key type value
1 1 5
1 3 5
2 1 1
2 2 1
2 3 1
3 1 8
我一直在使用axis = 1的应用,但是我无法找到一种方法来返回DataFrame每行超过1行。 提取所有不同类型的'然后循环连接似乎很难看。
任何想法? 感谢!!!
答案 0 :(得分:1)
import itertools
import pandas as pd
import numpy as np
def melt_series(s):
lengths = s.str.len().values
flat = [i for i in itertools.chain.from_iterable(s.values.tolist())]
idx = np.repeat(s.index.values, lengths)
return pd.Series(flat, idx, name=s.name)
melt_series(df.type).to_frame().join(df.drop('type', 1)).reindex_axis(df.columns, 1)
<强> 设置 强>
df = pd.DataFrame({'key':[1,2,3],
'type':[[1,3],[1,2,3],[1,2]],
'value':[5,1,8]})
df