我想要完成的事情的大局是:
我想选择我们亏本销售的部件,将它们放入列表中,然后遍历列表并使用.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;]都会是所有历史部分记录的汇总。
如果这确实是第二个问题,我会单独发布,但是我试着弄出我的(一点点)头发,试图找出第一部分。
提前感谢您的帮助!
答案 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