从熊猫数据框中选择多个值

时间:2019-09-10 17:57:20

标签: python pandas dataframe data-science

我有以下数据框:

PIC   Label   EncodedPixels
pic1  fish    True
pic1  flower  True
pic1  gravel  False
pic1  sugar   False
pic2  fish    True
pic2  flower  True

我想做的是这个

对于PIC中的每个EQUAL值,计算共存的标签(为真实值)。  例如,每张照片播种鱼和花共存的次数。

我可以通过以下方式对每个值进行计数:

df.loc[ (df['Pixels'] == True ) & (df['Label'] == 'Sugar') ])

预期输出是每个图片的组合数量。例如,在pic1中,鱼和花在EncodedPixels中都是true,因此输出为2 剩下的我该怎么办?

1 个答案:

答案 0 :(得分:-1)

我相信这就是您要的:

df

>>> PIC Label   EncodedPixels
    0   pic1    fish    True
    1   pic1    flower  True
    2   pic1    gravel  False
    3   pic1    sugar   False
    4   pic2    fish    True
    5   pic2    flower  True


helper_df = df.groupby(['PIC', 'Label']).apply(lambda grp: grp['EncodedPixels'].sum()).unstack()
helper_df


>>> Label   fish    flower  gravel  sugar
    PIC             
    pic1    1.0 1.0 0.0 0.0
    pic2    1.0 1.0 NaN NaN

如果您有更多标签,建议您使用上表,因为下一步是n^2。但是,如果您只想要每个标签的图片级计数,则此df可以满足:

output_df = pd.DataFrame(index = df['Label'].unique(), columns = df['Label'].unique())

for ind_x in output_df.columns:
    for ind_y in output_df.columns:
        output_df.loc[ind_x, ind_y] = helper_df[helper_df[ind_x] & helper_df[ind_y]].sum()[ind_x]

output_df

    >>> fish    flower  gravel  sugar
        fish    2   2   0   0
        flower  2   2   0   0
        gravel  0   0   0   0
        sugar   0   0   0   0

此外,祝Kaggle好运; P