熊猫:创建从一个列表
问题描述:
列几行
比方说,我有这样的事情:熊猫:创建从一个列表
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
当一列包含项目的列表。 我想为包含多种类型的每行创建几行。
Ontaining这样的:
key type value
1 1 5
1 3 5
2 1 1
2 2 1
2 3 1
3 1 8
我一直在玩与轴= 1适用,但我不能找到一种方法,每个数据帧的行返回超过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
循环连击是要走的路。如果你不愿意这样做,因为它“看起来很丑”,那么真正的丑陋的东西就是首先在列中建立一个列表的数据框。避免先建立这样的列是正确的路,你的问题将很好地消失。 – Boud
我继承了DataFrame :)我会尝试循环concat方法。 – user3635284