我有一个dataframe,它看起来如下(示例):
id val
a 4
a 6
b 2
b 4
b 8
c 3
c 4
c 6
c 8我想做groupby id,并为每个组保留这些值,以确保最终结果列val尽可能多样化。例如,您可以看到每个组都有val 4。最糟糕的输出是:
id val
a 4
b 4
c 4最好的办法是:
id val
a 4
b 2
c 6或所有val中的值都尽可能多样化的任何其他地方。但是,在某些情况下,val中的所有值都不可能是唯一的。
我该怎么做呢?
发布于 2022-10-16 07:01:28
IIUC,您希望每个id获得一行,优先选择“罕见”的值。
您可以重塑以获得计数/虚拟值,然后排序以获得稀有值:
df2 = pd.crosstab(df['id'], df['val'])
out = (df2
.sort_index(axis=1, key=df2.sum().get)
.replace({0: pd.NA})
.stack().reset_index()
.drop(columns=0)
.groupby('id', as_index=False).first()
)输出:
id val
0 a 6
1 b 2
2 c 3https://stackoverflow.com/questions/74084784
复制相似问题