Pandas合并具有重复ID的行有条件地适用于CSV

时间:2018-02-12 23:41:19

标签: python pandas csv dataframe

我有以下df,我想合并具有相同ID的行,除非有重复

[

示例输出

public class JSON_Browse_Root
{
    public List<JSON_Browse_Content> browse_content { get; set; }
}

我尝试过groupby但是当你写入csv时会抛出错误。

3 个答案:

答案 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'])