【问题标题】:Last member of each element of an id list of indices in relational dataset关系数据集中索引 id 列表的每个元素的最后一个成员
【发布时间】:2022-01-05 15:01:59
【问题描述】:

假设我在 python 中有两个数据集:家庭和人(个人)。一个密钥或 id (int64) 将一个家庭与一个或多个个人联系起来。我想创建一个名为“last_member”的二进制变量,如果同一家庭中有更多人,则该变量取值为 0,如果此人是该家庭的最后一个成员,则取值为 1。

一个简单的例子如下:

last_member id ...
0           1  ...
0           1  ...
1           1  ...
1           2  ...
0           3  ...
1           3  ...
...

我可以从家庭数据集或个人数据集本身获取唯一 ID 的数量。

我感觉numpy's where functionpandas' aggregate 都是找到此类解决方案的有力候选者。尽管如此,我还是无法理解一个不涉及(比如说)循环遍历索引列表的高效解决方案。

【问题讨论】:

    标签: python pandas dataframe numpy relational-database


    【解决方案1】:

    我编写了一个可以高效运行并解决问题的函数。这个想法是创建充满零的变量“last_member”。这个变量让我们可以使用pandas' groupby 计算每个 id 的成员数。然后我们计算累积和(减去 1,因为 python 的索引)来找到我们想要将“last_member”变量的值更改为 1 的索引。

    def create_last_member_variable(data):
        """ Creates a last_member variable based on the index of id variable.
        """
        data["last_member"] = 0
        n_members = data.groupby(["id"]).count()["last_member"]
        row_idx = np.cumsum(n_members) - 1 
        data.loc[row_idx, "last_member"] = 1
    
        return data
    

    【讨论】:

      猜你喜欢
      • 2016-07-14
      • 1970-01-01
      • 2020-02-19
      • 2012-04-28
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2017-05-11
      相关资源
      最近更新 更多