【问题标题】:Fill empty columns with values from another column of another row based on an identifier根据标识符用另一行的另一列的值填充空列
【发布时间】:2022-01-13 20:13:37
【问题描述】:

我正在尝试根据标识符填充包含重复元素的数据框。 我的数据框如下:

   Code Value
0  SJHV   
1  SJIO    96B
2  SJHV    33C
3  CPO3    22A
4  CPO3    22A
5  SJHV    33C       #< -- Numbers stored as strings
6   TOY   
7   TOY             #< -- These aren't NaN, they are empty strings

仅当存在非空“值”行时,我想删除空的“值”行。为了清楚起见,我希望我的输出看起来像:

   Code Value
0  SJHV    33C
1  SJIO    96B
2  CPO3    22A      
3   TOY         

我的尝试如下:

df['Value'].replace('', np.nan, inplace=True)

df2 = df.dropna(subset=['Value']).drop_duplicates('Code')

正如预期的那样,此代码还删除了“TOY”代码。有什么建议吗?

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    如果你对它们进行排序,空字符串应该放在底部,然后你可以删除重复项。

    import pandas as pd
    df = pd.DataFrame({'Code':['SJHV','SJIO','SJHV','CPO3','CPO3','SJHV','TOY','TOY'],'Value':['','96B','33C','22A','22A','33C','','']})
    df = (
        df.sort_values(by=['Value'], ascending=False)
          .drop_duplicates(subset=['Code'], keep='first')
          .sort_index()
    )
        
    

    输出

       Code Value
    1  SJIO   96B
    2  SJHV   33C
    3  CPO3   22A
    6   TOY      
    

    【讨论】:

    • 嗯,是的,我可以通过以下方式向 drop_duplicates 添加一个子集来实​​现这一点:df=df.sort_values(by=['Value'], ascending=False).drop_duplicates(keep='first', subset=['Code'])。问题是我想我希望有一个更好的版本。不过谢谢!
    • 更好的版本是什么意思?你还需要它做什么?
    • 没有“更好”的解决方案。在 Python 中,这是要走的路。
    猜你喜欢
    • 2022-01-15
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多