熊猫选择成可迭代变量?

时间:2017-01-04 12:59:26

标签: python pandas dataframe

我想要完成的事情的大局是:

我想选择我们亏本销售的部件,将它们放入列表中,然后遍历列表并使用.agg()进行分析。

这是指向包含一些数据和样本输出的示例CSV文件的链接:

https://drive.google.com/open?id=0B4xdnV0LFZI1RktqR0dVWVZEYkU

到目前为止,这是我的代码:

import pandas as pd
df = pd.DataFrame
df =  pd.read_csv('SO_Sample.csv')
dfLoss = df[(df['Profit/Loss'] < 0)]

part_count = pd.DataFrame
part_count =   (dfLoss.groupby(['Part','Rev'])[['Serial_No']].count())
print(part_count)

我得到了一个结果集,而且我遇到了问题。

我不知道如何从Pandas中的分组选择中分配可迭代变量对。一旦我能做到这一点,我想循环原始的df并获得零件和转速组合的历史汇总数据。

这引出了我可能是第二个问题,即熊猫拼图的组合部分 - 将所有数据全部放在一起。

结束输出如下所示:

Part    Rev    Serial_No    Profit/Loss    Count    Min    Max    Mean    Std

[&#39;部分&#39;,&#39; Rev&#39;,&#39; Serial_No&#39;,&#39;利润/损失&#39;]将来自原始的df和那么[&#39;计数&#39;,&#39; min&#39;,&#39; max&#39;,&#39;意思&#39;&#39; std&#39;]都会是所有历史部分记录的汇总。

如果这确实是第二个问题,我会单独发布,但是我试着弄出我的(一点点)头发,试图找出第一部分。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

试试这个:

In [48]: (df[df[['Part','Rev']].isin(dfLoss[['Part','Rev']]).all(1)]
    ...:    .groupby(['Part','Rev','Serial_No'])
    ...:    .agg({'Profit/Loss':['count','min','max','std']})
    ...: )
    ...:
Out[48]:
                        Profit/Loss
                              count   min   max std
Part      Rev Serial_No
Table leg a   S12369              1 -19.0 -19.0 NaN
          b   S12349              1 -34.0 -34.0 NaN
          c   S12359              1 -57.0 -57.0 NaN
Widget    a   S12345              1  -4.0  -4.0 NaN
wrench    a   S12360              1 -99.0 -99.0 NaN
          b   S12370              1 -22.0 -22.0 NaN
          c   S12350              1 -15.0 -15.0 NaN

或:

In [49]: (df[df[['Part','Rev']].isin(dfLoss[['Part','Rev']]).all(1)]
    ...:    .groupby(['Part','Rev','Serial_No'], as_index=False)
    ...:    .agg({'Profit/Loss':['count','min','max','std']})
    ...: )
    ...:
Out[49]:
        Part Rev Serial_No Profit/Loss
                                 count   min   max std
0  Table leg   a    S12369           1 -19.0 -19.0 NaN
1  Table leg   b    S12349           1 -34.0 -34.0 NaN
2  Table leg   c    S12359           1 -57.0 -57.0 NaN
3     Widget   a    S12345           1  -4.0  -4.0 NaN
4     wrench   a    S12360           1 -99.0 -99.0 NaN
5     wrench   b    S12370           1 -22.0 -22.0 NaN
6     wrench   c    S12350           1 -15.0 -15.0 NaN

说明:

In [53]: df[['Part','Rev']].isin(dfLoss[['Part','Rev']])
Out[53]:
      Part    Rev
0     True   True
1    False  False
2    False  False
3    False  False
4     True   True
5     True   True
..     ...    ...
493  False  False
494  False  False
495  False  False
496  False  False
497  False  False
498  False  False

[499 rows x 2 columns]

In [54]: df[['Part','Rev']].isin(dfLoss[['Part','Rev']]).all(1)
Out[54]:
0       True
1      False
2      False
3      False
4       True
5       True
       ...
493    False
494    False
495    False
496    False
497    False
498    False
dtype: bool