如何根据值对Pandas DataFrame中的行进行分组以创建新列?
我有一个数据表 df,长得像这样:
` image_id category_id chessboard_position
0 0 7 a8
1 0 8 b8
2 0 9 c8
3 1 6 f7
4 1 6 g7
5 1 6 h7
6 1 0 b4
7 1 0 a2`
我想把它变成这样:
` image_id 0 6 7 8 9
0 0 a8 b8 c8
1 1 {b4, a2} {f7, g7, h7}
我试着用这个方法:df = df.groupby('image_id')["chessboard_position"].apply(lambda x: pd.Series(x.values)).unstack(1)
。
这样做后,我得到了类似于:
` image_id 1 2 3 4 5
0 0 a8 b8 c8
1 1 f7 g7 h7 b4 a2
`
这个方法会按照棋盘位置的顺序填充新列。不过,我需要一种方法,可以根据类别 ID 的值来排序“展开”的结果。
1 个回答
0
你可以使用 pd.crosstab
这个函数:
out = (
pd.crosstab(
df["image_id"],
df["category_id"],
df["chessboard_position"],
aggfunc=lambda v: v if len(v) == 1 else set(v),
)
.reset_index()
.rename_axis(columns=None)
)
print(out)
输出结果是:
image_id 0 6 7 8 9
0 0 NaN NaN a8 b8 c8
1 1 {a2, b4} {g7, h7, f7} NaN NaN NaN