在pandas中用空值替换重复值

3
我正在处理Pandas数据框架。 以下是示例代码: ` import pandas as pd`
df = pd.DataFrame(
                  {'name1': ['A', 'C', 'A', 'B','C', 'D','D', 'C', 'A', 'B','C', 'A'], 
                   'name2': ['B', 'D', 'C', 'D','B','A','A', 'D', 'C', 'D','D','B'], 
                   'id': [1, 1, 1, 1, 1, 1,2, 2, 2, 2, 2, 2], 
                   'Value1': [1, 2, 3, 4, 5, 6, 0, 2, 4, 6, 3, 5], 
                   'Value2': [0, 2, 4, 6, 3, 5, 1, 2, 3, 4, 5, 6]
                  },
                  columns=['name1','name2','id','Value1','Value2'])`

我可以使用以下groupby来执行聚合:

m = df.groupby(['id','name1',])['Value1'].sum()

当我打印m时,它将显示如下:
   id  name1
    1   A        4
        B        4
        C        7
        D        6
    2   A        9
        B        6
        C        5
        D        0
    Name: Value1, dtype: int64

当我将m写入csv文件时,它只包含value1,因为它是一个Pandas系列。使用这个系列,我想创建一个与下面表格完全相同的数据框。
  id name1  Value1
  1     A      4
  1     B      4
  1     C      7
  1     D      6
  2     A      9
  2     B      6
  2     C      5
  2     D      0

有人能给我建议如何做到这一点吗? 非常感谢。 Zep


1
写入Excel - BENY
谢谢Wen,我现在会将它写入Excel。 - Zephyr
2个回答

3

如果你需要保存为CSV格式,这是一个小技巧,可以在保存之前修复显示。

m = m.sort_index().reset_index()
m['id'] = m['id'].mask(m['id'].ne(m['id'].shift()).cumsum().duplicated(), '')

print(m)
  id name1  Value1
0  1     A       4
1        B       4
2        C       7
3        D       6
4  2     A       9
5        B       6
6        C       5
7        D       0

m.to_csv('file.csv')

免责声明:如果您在保存之外做任何事情,请勿在此之前运行此程序。

@Zephyr 请保存以下代码:m.sort_index().reset_index().to_csv(...) - cs95
感谢 @coldspeed 我该如何将这个系列直接转换为数据框,就像帖子中的表格一样? 非常感谢您的建议。 - Zephyr
谢谢。我的意思是不保存为CSV文件,只是将其转换为数据框。我应该删除.to_csv部分吗? - Zephyr
@Zephyr 是的,那就足够了。你可以直接使用 m = m.reset_index() 或者 m = m.to_frame() - cs95
感谢 @coldspeed。 - Zephyr
显示剩余2条评论

3
简单来说,
 #reseting the index
 m = m.sort_index().reset_index()
 #masking duplicated value with empty
 m['id']=m['id'].mask(m['id'].duplicated(),"")
 #writing dataframe to a csv file
 m.to_csv("output.csv",index=False)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接