【问题标题】:Select multiple values from pandas dataframe从熊猫数据框中选择多个值
【发布时间】:2020-01-12 12:30:27
【问题描述】:

我有以下数据框:

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 中都为真,因此输出将为 2 剩下的怎么办?

【问题讨论】:

  • 你的预期输出是什么?
  • 这有点令人困惑,因为不清楚什么是约束,以及您在解决方案的过程中计算了什么。如果问题只是计算有多少 PIC 有鱼和花,这很简单。我不确定我明白为什么 EncodedPixels 会发挥作用。当标签是鱼/花时它是 False 还是不是时 True? PIC/Label 是 DataFrame 的唯一键吗?
  • 预期输出是每张图片的组合数。例如,在 pic1 中,鱼和花在 EncodedPixels 中都为真,因此输出将为 2

标签: python pandas dataframe data-science


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 2015-10-23
    相关资源
    最近更新 更多