繁体   English   中英

如何根据另一列中的重复值添加一列中的行,并最终将第一行保留在python中?

[英]How to add rows in one column based on repeated values in another column , and finally keep the first row in python?

我对 python pandas 模块很陌生。

假设我有一个数据框或表格,如下所示:

 df = pd.DataFrame({
        'Column A': [12,12,12, 15, 16, 141, 141, 141, 141],
         'Column B':['Apple' ,'Apple' ,'Apple' , 'Red', 'Blue', 'Yellow', 'Yellow', 'Yellow', 'Yellow'],
        'Column C':[100, 50, np.nan , 23 , np.nan , 199 , np.nan , 1,np.nan]
    }) 

或者我有一个数据表如下:


    | Column A | Column B |Column C 
----| -------- | ---------|--------
0   | 12       | Apple    |100     
1   | 12       | Apple    |50      
2   | 12       | Apple    |NaN      
3   | 15       | Red      |23       
4   | 16       | Blue     |NaN      
5   | 141      | Yellow   |199      
6   | 141      | Yellow   |NaN      
7   | 141      | Yellow   |1        
8   | 141      | Yellow   |NaN  


  • 如果 A 列中的值重复,则将 C 列中的相应值相加并将总和粘贴到新的 D 列中(例如,12 有 3 行,因此我们应将相应值相加 100 + 50 + NaN,求和结果为150 应该存储在新的列 D) 中。

  • 如果 A 列中的值不重复直接将 C 列值粘贴到新 D 列(如第 3 行)中,但对于 NaN,则应为 0(如第 4 行)。

你能帮我在 python jupyter notebook 中得到这样的输出吗:

      | Column A | Column B |Column C |Column D 
----- | -------- | ---------|---------|---------
 0    | 12       | Apple    |100      |150      
 1    | 15       | Red      |23       |23       
 2    | 16       | Blue     |NaN      |0        
 3    | 141      | Yellow   |199      |200  

df.groupby("Column A", as_index=False).agg(B=("Column B", "first"),
                                           C=("Column C", "first"),
                                           D=("Column C", "sum"))
#      Column A         B         C         D
# 0          12     Apple     100.0     150.0
# 1          15       Red      23.0      23.0
# 2          16      Blue       NaN       0.0
# 3         141    Yellow     199.0     200.0

这是一种方法

df['Column D'] = df.groupby('Column A')['Column C'].transform('sum')
df = df.drop_duplicates('Column A')

groupby('Column A')Column A每个唯一值创建一组行。 然后['Column C'].transform('sum')为该组中的所有行添加 C 值。

这个总和被保存到 D 列,然后我们可以删除重复项以保留第一个

此解决方案中有一些假设。 即使它们彼此不正确,它也会将 A 中的所有12值组合在一起,这可能是也可能不是您想要的。

df = df.set_index(df['Column A']).drop('Column A', axis=1)
df['Column D'] = df.groupby('Column A')['Column C'].sum()
df = df.drop_duplicates(subset=['Column B'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM