我有以下数据框:
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 剩下的我该怎么办?
答案 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