Python 从数据框中选择多个值

Python 从数据框中选择多个值,python,pandas,dataframe,data-science,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中的每个相等值,计算共存的标签(为真值)。 例如,在每张照片上播种鱼和花共存的次数 我可以通过以下方式计算每个值: df.loc[ (df['Pixels'] == T

我有以下数据帧:

PIC   Label   EncodedPixels
pic1  fish    True
pic1  flower  True
pic1  gravel  False
pic1  sugar   False
pic2  fish    True
pic2  flower  True
我想做的是:

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

我可以通过以下方式计算每个值:

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

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

我相信这就是你想要的:

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
。但是,如果您只需要每个标签的pic级别计数,则此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

还有,祝卡格尔好运;P

您的预期输出是什么?这有点令人困惑,因为不清楚什么是约束,什么是您在解决方案的过程中计算出来的。如果问题是简单地计算有多少张图片有鱼和花,这很简单。我不确定我是否明白为什么EncodedPixel会起作用。当标签是鱼/花时,它是否为假;当标签不是时,它是否为真?PIC/Label是数据帧的唯一键吗?预期输出是每个PIC的组合数。例如,在pic1中,鱼和花在EncodedPixels中都是真的,因此输出为2