Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫。康卡特生产所有的熊猫_Python_Numpy_Pandas - Fatal编程技术网

Python 熊猫。康卡特生产所有的熊猫

Python 熊猫。康卡特生产所有的熊猫,python,numpy,pandas,Python,Numpy,Pandas,我试图用pd.concat([a,b],axis=1)连接两个系列,但结果是一个数据帧中填充了NaNs,我的意思是: 制作两个系列 by_status=odr.set_索引('order_status')) g=按状态分组(['dt','product\u id']) 已付款订单=g.尺寸() payed_orders.name='payed_orders' 退款=按状态。loc[[1,2,3],:].groupby(['dt','product\u id']) 退款订单=退款大小() 退款订单

我试图用
pd.concat([a,b],axis=1)
连接两个系列,但结果是一个数据帧中填充了
NaN
s,我的意思是:

制作两个
系列
by_status=odr.set_索引('order_status'))
g=按状态分组(['dt','product\u id'])
已付款订单=g.尺寸()
payed_orders.name='payed_orders'
退款=按状态。loc[[1,2,3],:].groupby(['dt','product\u id'])
退款订单=退款大小()
退款订单。名称='退款订单'
#我要处理退款单和付款单
>>已付款订单头()
dt产品标识
2015-01-15  10001          1
10007          1
10016         14
10022          1
10023          1
名称:已付款订单,数据类型:int64
>>>退还订单。头()
dt产品标识
2015-01-15  10007         1
10016         4
10030         1
2015-01-16  10007         3
10008         1
名称:退款单,数据类型:int64
>>>pd.concat([payed_orders.head(),return_orders.head()],axis=1,ignore_index=False)
已付款订单退款订单
dt产品标识
2015-01-15 10001楠楠楠
10007南南
10016楠楠
10022楠楠
10023楠楠
10030楠楠
2015-01-16 10007楠楠
10008楠楠
我不认为我一定犯了一些明显的错误,但我真的想不出来,请帮忙

另外,代码是从ipython笔记本上复制的,不要对格式感到奇怪

更新 尝试传递
ignore\u index=True
,下面是发生的情况:

pd.concat([payed_orders.tail(),return_orders.tail()],axis=1,ignore_index=True) 0 1 dt产品标识 2015-09-07 1000081楠楠 1000084南南 1000094南南 1000096楠楠 1000124楠楠 1000131楠楠 1000132南南 1000133楠楠 1000134南南 1000137楠楠 至于索引格式问题 这里有两个系列不能很好地结合在一起:

>a4.head()到
{'actual_suborders':{(datetime.date(2015,1,15),10001):1,
(日期时间日期(2015年1月15日)10016:10,
(日期时间日期(2015年1月15日),10022):1,
(日期时间日期(2015年1月15日),10023):1,
(datetime.date(2015,1,15),10024):1}
>>>a5.头()至第()条
{'u suborders':{(datetime.date(2015,1,15),10007):1,
(日期时间日期(2015年1月15日),10016):4,
(日期时间日期(2015年1月15日),10030):1,
(日期时间日期(2015年1月16日),10007):4,
(datetime.date(2015,1,16),10008):1}
>>>pd.concat([a4.head(),a5.head()],轴=1)
实际子订单退款子订单
dt产品标识
2015-01-15 10001楠楠楠
10007南南
10016楠楠
10022楠楠
10023楠楠
10024楠楠
10030楠楠
2015-01-16 10007楠楠
10008楠楠
终极手段 感谢所有决定关注这个伟大社区的人

我已将上述系列的标题序列化,并上传到evernote,其中包含要加载和解析的代码


为了使这一点起作用,我必须从每个系列的旧索引的串联中创建唯一的值。然后,在连接时,我将其作为参数传递给
join\u axes

import datetime
import pandas as pd

s1 = pd.Series([1, 10, 1, 1, 1], 
               name='actual_suborders',
               index=[(dt.date(2015, 1, 15), 10001),
                      (dt.date(2015, 1, 15), 10016),
                      (dt.date(2015, 1, 15), 10022),
                      (dt.date(2015, 1, 15), 10023),
                      (dt.date(2015, 1, 15), 10024)])


s2 = pd.Series([1, 4, 1, 4, 1], 
               name='refund_suborders',
               index=[(dt.date(2015, 1, 15), 10007),
                      (dt.date(2015, 1, 15), 10016),
                      (dt.date(2015, 1, 15), 10030),
                      (dt.date(2015, 1, 16), 10007),
                      (dt.date(2015, 1, 16), 10008)])

idx = set(pd.concat([s1.reset_index()['index'], 
                     s2.reset_index()['index']], 
                    ignore_index=True))

>>> pd.concat([s1, s2], axis=1, join_axes=[idx])
                     actual_suborders  refund_suborders
(2015-01-15, 10022)                 1               NaN
(2015-01-15, 10001)                 1               NaN
(2015-01-15, 10023)                 1               NaN
(2015-01-16, 10008)               NaN                 1
(2015-01-15, 10030)               NaN                 1
(2015-01-15, 10016)                10                 4
(2015-01-15, 10007)               NaN                 1
(2015-01-16, 10007)               NaN                 4
(2015-01-15, 10024)                 1               NaN
此外,您的索引似乎在某个地方发生了更改。您的
by_status.groupby(['dt','product_id'])
操作应该会产生一个多索引,但是上面粘贴的
a4.head()
a5.head()
的结果表明它在行的某个位置更改为元组对。我怀疑这可能是最终的问题

编辑

我不明白为什么
concat
不起作用,但我使用
merge
实现了您的目标

首先,重置索引。然后合并
dt
product\u id
上的数据帧:

a4.reset_index(inplace=True)
a5.reset_index(inplace=True)
>>> a4.merge(a5, on=['dt', 'product_id'], how='outer')
           dt  product_id  actual_suborders  refund_suborders
0  2015-01-15       10001                 1               NaN
1  2015-01-15       10016                10                 4
2  2015-01-15       10022                 1               NaN
3  2015-01-15       10023                 1               NaN
4  2015-01-15       10024                 1               NaN
5  2015-01-15       10007               NaN                 1
6  2015-01-15       10030               NaN                 1
7  2015-01-16       10007               NaN                 4
8  2015-01-16       10008               NaN                 1

大概是因为您的多索引没有公共索引值,当您传递
忽略\u index=True
时会发生什么?在哪里定义了付款\u子订单退款\u订单,它们似乎不是列标题?他们似乎都不是DF的一部分?所以你得到的是NaN,因为它们不存在任何值…@EdChum没有任何好处,我更新了我的帖子,表明这两个系列的索引确实有共同的索引values@dartdog它们是从groupby对象计算出来的,按
['dt','product\u id']
分组,这与这种情况有关吗?我认为这可能是问题所在,请尝试将group by的结果分配给新的DFs。。groupby操作应该并且确实会产生一个多索引,当我使用
系列将pandas系列转换为dict时。为了_dict()
,基础多索引只是转换为元组,并不是说索引本身是一个元组数组,我文章中的代码就是我用来生成这些系列对象的代码,正如你所看到的,它不包含任何中间步骤,我将发布原始序列化数据,即使它是格式错误的多索引,concat操作也不应该产生一个全NaN帧,对吗?它至少应该包含一些东西,所有的数字都到哪里去了?我注意到,
pd.merge
也很有效,但我正在尝试连接5到7个类似的熊猫系列,我已经分析了,了解到一次合并两个对我的需要来说太昂贵了。为什么不打开一张新的票“可能的错误:熊猫浓缩多索引”. 提及您正在使用的Pandas和Python版本,并包括示例数据。