我有以下df,我想合并具有相同ID的行,除非有重复
[
示例输出
public class JSON_Browse_Root
{
public List<JSON_Browse_Content> browse_content { get; set; }
}
我尝试过groupby但是当你写入csv时会抛出错误。
答案 0 :(得分:2)
此解决方案使用Divakar的justify
功能。如果需要,请提前转换为数字:
df = df.apply(pd.to_numeric, errors='coerce', axis=1)
现在,请致电groupby
+ transform
:
df.set_index('Ids')\
.groupby(level=0)\
.transform(
justify, invalid_val=np.nan, axis=0, side='up'
)\
.dropna(how='all')
A B C D E F G H I J
Ids
4411 24.0 2.0 55.0 26.0 1.0 24.0 2.0 54.0 26.0 0.0
4412 22.0 4.0 54.0 26.0 0.0 18.0 8.0 54.0 26.0 0.0
7401 12.0 14.0 54.0 26.0 0.0 0.0 25.0 53.0 26.0 0.0
7402 24.0 2.0 54.0 26.0 0.0 25.0 1.0 54.0 26.0 0.0
10891 16.0 10.0 54.0 26.0 0.0 3.0 23.0 54.0 26.0 0.0
10891 NaN NaN NaN NaN NaN 5.0 10.0 6.0 15.0 0.0
答案 1 :(得分:2)
这应该很慢,但可以达到你所需要的效果
np.vstack([mat[:, i-2:i] for i in range(2, mat.shape[1]+1, 2)]).reshape(3,-1,2)
答案 2 :(得分:0)
假设所有空白值都是nan,另一个选项是使用groupby和dropna:
df.loc[:,'A':'E'] = df.groupby('Ids').apply(lambda x: x.loc[:,'A':'E'].ffill(limit=1))
df.dropna(subset=['F','G','H','I','J'])