将dataframe中的数组值拆分为新的dataframe-python
我有一个pandas数据框,其中有一个变量是数组数组。我想从这个变量创建一个新的数据帧 我当前的数据帧“水果”如下所示将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']]
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)