把选择变成可数变量?

2024-04-25 09:18:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我要实现的目标是:

我想选择我们亏本出售的零件,将它们放入一个列表中,然后遍历该列表并使用.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)

我得到了一个结果集,这就是我被卡住的地方。你知道吗

我不知道如何从熊猫的分组选择中分配一对可iterable变量。一旦我能做到这一点,我想通过原始的df循环,并获得零件和版本组合的历史摘要数据。你知道吗

这让我想到了可能是第二个问题,熊猫拼图中的组合块——将返回的数据全部拼凑起来。你知道吗

最终输出如下所示:

Part    Rev    Serial_No    Profit/Loss    Count    Min    Max    Mean    Std

['Part'、'Rev'、'Serial\ u No'、'Profit/Loss']将来自原始数据框,然后['count'、'min'、'max'、'mean'、'std']将是所有历史零件记录的总和。你知道吗

如果这确实是第二个问题,我会分别发帖,但我正在努力找出问题的第一部分。你知道吗

提前感谢您的帮助!你知道吗


Tags: csv数据no示例dataframedf列表count
1条回答
网友
1楼 · 发布于 2024-04-25 09:18:03

试试这个:

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

相关问题 更多 >