python - Pandas 选择成可迭代变量?

标签 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 并获取零件和转速组合的历史摘要数据。

这让我想到了第二个问题,Pandas 拼图的组合部分 - 将返回的数据全部放在一起。

最终输出看起来像这样:

Part    Rev    Serial_No    Profit/Loss    Count    Min    Max    Mean    Std

['Part', 'Rev', 'Serial_No', 'Profit/Loss'] 将来自原始 df,然后是 ['count', 'min', 'max', 'mean', ' std'] 将是所有历史部分记录的总和。

如果这确实是第二个问题,我会单独发布,但我正在费力(一点点)试图找出第一部分。

预先感谢您的帮助!

最佳答案

试试这个:

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

关于python - Pandas 选择成可迭代变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41464461/

相关文章:

python - 比较 Pandas 中的缩写词

python - 模块未找到错误 : No module named 'sklearn.cross_validation' ??如何修复它?

python - 使用 Python 求线性方程组的整数解

python - 识别 pandas 中组内的第一个非零元素

python - 如何对 Pandas DF 列中的值进行排序并删除重复项

apache-spark - Spark : How to do a dropDuplicates on a dataframe while keeping the highest timestamped row

python - 分割层输出时,Keras 抛出 `' Tensor' object has no attribute '_keras_shape'`

python - 从 Google Cloud Storage 读取 CSV 文件到 Datalab 并转换为 pandas dataframe

python - Pandas:如果索引和列相同,则将值更改为 NA

python - Pandas python : getting one value from a DataFrame