我有一个子数组 itemdata,长度为6行。此数据最初在主数组中找到,但已重新格式化,因此每行有1个唯一产品。
我有一个主数组 saledata,长度为4行,看起来有点像这样:
id sub-array
0 001 [{'type': 'line_items', 'id': '78', 'attributes': {'status': 'allocated', 'quantity': 1, 'various_other_data': 'etc'}}]
1 002 [{'type': 'line_items', 'id': '80', 'attributes': {'status': 'allocated', 'quantity': 2, 'various_other_data': 'etc'}}]
2 003 [{'type': 'line_items', 'id': '85', 'attributes': {'status': 'allocated', 'quantity': 1, 'various_other_data': 'etc'}}, {'type': 'line_items', 'id': '86', 'attributes': {'status': 'allocated', 'quantity': 1, 'various_other_data': 'etc'}}]
3 004 [{'type': 'line_items', 'id': '92', 'attributes': {'status': 'allocated', 'quantity': 2, 'various_other_data': 'etc'}}, {'type': 'line_items', 'id': '93', 'attributes': {'status': 'allocated', 'quantity': 2, 'various_other_data': 'etc'}}]
然后我得到了sub-array itemdata(基本上就是json归一化的column sub-array):
type id attributes.status attributes.quantity attributes.various_other_data
0 line_item 78 allocated 1 etc
0 line_item 80 allocated 2 etc
0 line_item 85 allocated 1 etc
1 line_item 86 allocated 1 etc
0 line_item 92 allocated 2 etc
1 line_item 93 allocated 2 etc
目前,我将子数组视为字符串(在它被第二个dataframe规范化之后),这允许我执行以下操作:
for f in itemdata['id']:
df['sub-array'].str.contains(f)
其产生以下:
0 True
1 False
2 False
3 False
Name: relationships.line_items.data, dtype: bool
0 False
1 True
2 False
3 False
Name: relationships.line_items.data, dtype: bool
0 False
1 False
2 True
3 False
Name: relationships.line_items.data, dtype: bool
0 False
1 False
2 True
3 False
Name: relationships.line_items.data, dtype: bool
0 False
1 False
2 False
3 True
Name: relationships.line_items.data, dtype: bool
0 False
1 False
2 False
3 True
Name: relationships.line_items.data, dtype: bool
这是正确的!但是现在我试图将子数组与父数组进行匹配,将上述结果的索引与初始数组 saledata 进行匹配,其中True但正在努力找到正确的方法来做到这一点。
Python似乎不喜欢下面的方法(Series的真值是模糊的yada yada yada),并且不确定如何继续。
for f in itemdata['id']:
if df['sub-array'].str.contains(f) == True:
任何建议都非常感谢!
编辑:
这就是我要找的(注意etc是关闭的&不确定pandas是否允许多行具有相同的索引值-如果不是,这不是一个大问题):
id type itemdata.id itemdata.attributes.status itemdata.attributes.quantity
0 001 line_items 78 allocated etc
1 002 line_items 80 allocated etc
2 003 line_items 85 allocated etc
2 003 line_items 86 allocated etc
3 004 line_items 92 allocated etc
3 004 line_items 93 allocated etc
2条答案
按热度按时间ccrfmcuu1#
如果需要在规范化
sub-array
后追加id
(或多列),可以使用DataFrame.join
,并通过Series.explode
分解行设置索引:如果只需要处理
id
列和id
值是唯一的,则创建helper Series并使用Series.map
:wljmcqd82#
因此,您可以通过以下方式生成主数组: