根据熊猫中的组为列分配值

时间:2018-07-02 06:34:23

标签: python pandas pandas-groupby

我有一个看起来像这样的数据集:

data_set = pd.DataFrame([
    {'img_type': 'bias', 'CCD-TEMP': -10, 'explen': 0, 'mean': 1023.4234},
    {'img_type': 'bias', 'CCD-TEMP': -10, 'explen': 0, 'mean': 1024.4334},
    {'img_type': 'bias', 'CCD-TEMP': -15, 'explen': 0, 'mean': 1022.2344},
    {'img_type': 'bias', 'CCD-TEMP': -15, 'explen': 0, 'mean': 1021.1031},
    {'img_type': 'dark', 'CCD-TEMP': -10, 'explen': 30, 'mean': 1025.9959},
    {'img_type': 'dark', 'CCD-TEMP': -10, 'explen': 30, 'mean': 1023.3434},
    {'img_type': 'dark', 'CCD-TEMP': -10, 'explen': 60, 'mean': 1020.1234},
    {'img_type': 'dark', 'CCD-TEMP': -10, 'explen': 60, 'mean': 1022.4234},
    {'img_type': 'dark', 'CCD-TEMP': -15, 'explen': 30, 'mean': 1025.9959},
    {'img_type': 'dark', 'CCD-TEMP': -15, 'explen': 30, 'mean': 1023.3434},
    {'img_type': 'dark', 'CCD-TEMP': -15, 'explen': 60, 'mean': 1020.1234},
    {'img_type': 'dark', 'CCD-TEMP': -15, 'explen': 60, 'mean': 1022.4234},
    ])

我想做的是隔离img_type ='bias'行,通过CCD-TEMP对其进行分组,然后为每组计算'mean'的mean()。这似乎可以解决问题:

>>> data_set[data_set['img_type'].isin(['bias'])].groupby('CCD-TEMP')['mean'].mean()
... 
CCD-TEMP
-15    1021.66875
-10    1023.92840
Name: mean, dtype: float64

我现在要做的是将这些值应用于一个名为“ Offset”的新列,该列基于CCD-TEMP应用于一组所有行。到目前为止,我已经尝试了一些方法,最后一次尝试如下:

>>> data_set['Offset'] = data_set[data_set['img_type'].isin(['bias'])].groupby('CCD-TEMP')['mean'].mean()
>>> data_set
    CCD-TEMP  explen img_type       mean  Offset
0        -10       0     bias  1023.4234     NaN
1        -10       0     bias  1024.4334     NaN
2        -15       0     bias  1022.2344     NaN
3        -15       0     bias  1021.1031     NaN
4        -10      30     dark  1025.9959     NaN
5        -10      30     dark  1023.3434     NaN
6        -10      60     dark  1020.1234     NaN
7        -10      60     dark  1022.4234     NaN
8        -15      30     dark  1025.9959     NaN
9        -15      30     dark  1023.3434     NaN
10       -15      60     dark  1020.1234     NaN
11       -15      60     dark  1022.4234     NaN

很明显,NaN不是我想要的。

用大熊猫处理类似问题的最佳方法是什么?一旦克服了这一障碍,我将需要对('CCD-TEMP','explen')组进行类似的处理。也欢迎为此目的提供任何建议。

1 个答案:

答案 0 :(得分:0)

我认为需要分配给bias的{​​{1}}行GroupBy.transform

mean

或者如果需要按data_set['Offset'] = data_set[data_set['img_type'].isin(['bias'])].groupby('CCD-TEMP')['mean'].transform('mean') print (data_set) CCD-TEMP explen img_type mean Offset 0 -10 0 bias 1023.4234 1023.92840 1 -10 0 bias 1024.4334 1023.92840 2 -15 0 bias 1022.2344 1021.66875 3 -15 0 bias 1021.1031 1021.66875 4 -10 30 dark 1025.9959 NaN 5 -10 30 dark 1023.3434 NaN 6 -10 60 dark 1020.1234 NaN 7 -10 60 dark 1022.4234 NaN 8 -15 30 dark 1025.9959 NaN 9 -15 30 dark 1023.3434 NaN 10 -15 60 dark 1020.1234 NaN 11 -15 60 dark 1022.4234 NaN 列的mean的{​​{3}}输出:

CCD-TEMP