将dataframe中的数组值拆分为新的dataframe-python

将dataframe中的数组值拆分为新的dataframe-python,python,arrays,pandas,Python,Arrays,Pandas,我有一个pandas数据框,其中有一个变量是数组数组。我想从这个变量创建一个新的数据帧 我当前的数据帧“水果”如下所示 Id Name Color price_trend 1 apple red [['1420848000','1.25'],['1440201600','1.35'],['1443830400','1.52']] 2 lemon yellow [['1403740800','0.32'],['1422057600','0.25']]

我有一个pandas数据框,其中有一个变量是数组数组。我想从这个变量创建一个新的数据帧

我当前的数据帧“水果”如下所示

Id  Name    Color    price_trend
1   apple   red      [['1420848000','1.25'],['1440201600','1.35'],['1443830400','1.52']]
2   lemon   yellow   [['1403740800','0.32'],['1422057600','0.25']]
我想要的是“价格趋势”栏中的一个新数据框,看起来像这样

Id    date         price
1     1420848000   1.25
1     1440201600   1.35
1     1443830400   1.52
2     1403740800   0.32
2     1422057600   0.25

谢谢你的建议

groupby+apply应该可以做到这一点

def f(group):
    row = group.irow(0)
    ids = [row['Id'] for v in row['price_trend']]
    dates = [v[0] for v in row['price_trend']]
    prices = [v[1] for v in row['price_trend']]
    return DataFrame({'Id':ids, 'date': dates, 'price': prices})

In[7]: df.groupby('Id', group_keys=False).apply(f)
Out[7]:
   Id        date price
0   1  1420848000  1.25
1   1  1440201600  1.35
2   1  1443830400  1.52
0   2  1403740800  0.32
1   2  1422057600  0.25
编辑:

要过滤坏数据(例如,具有值的
[[['None']]
列的
价格趋势
),一个选项是使用pandas


如果我在这里遗漏了一些明显的东西(仍在学习),请原谅,但是当我运行上面的代码时,我得到了错误“NameError:global name'DataFrame'未定义”。有什么建议吗?好的,所以我将“return DataFrame”改为“return pd.DataFrame”,现在我收到错误消息“indexer-ror:list index超出范围”。对于这种情况有什么建议吗?@nflove错误可能来自
f
v[0]
v[1]
)中的索引。您的示例数据的
price\u trend
是一个包含两个元素的列表。如果不是这样,我会检查我的
price\u trend
数据是否有不良数据(包含单个元素的列表),并将其过滤掉。感谢您的回复,我认为您是对的。我的一些行是空的,并且填充了
[['None']]
占位符。关于如何编辑上面的代码来处理这个问题,有什么建议吗?@nflove我添加了一个编辑来显示处理这个问题的方法
 criterion = df['price_trend'].map(lambda x: len(x) > 0 and all(len(pair) == 2 for pair in x))
 df[criterion].groupby('Id', group_keys=False).apply(f)