为了账号安全,请及时绑定邮箱和手机立即绑定

根据列值创建行号

根据列值创建行号

Qyouu 2023-02-15 17:23:49
我的 jupyter notebook 中有以下数据集作为输入:Product   Year    VariableA         2018        2A         2019        4B         2018        2B         2019        3我想知道在我的数据集中创建循环或其他东西或排序的最快方法是什么,以便我得到以下输出:Product   Year    Variable   Row_NumA         2018        2         1A         2018        2         2 A         2019        4         1A         2019        4         2A         2019        4         3A         2019        4         4B         2018        2         1B         2018        2         2and so on...TL;DR - 基于特定列中的变量,我想创建行。例如,如果变量为 3,我想创建该行的 3 个副本,其中一列的值为 1、2、3。我认为我发现的一种方法是首先根据我的变量创建重复项,然后使用类似于 rank() 或 row_number() 的函数来创建我的“row_num”列。如果任何人都可以分享其他可能的方法来做同样的事情,那将会很有帮助。😄
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

如果我理解正确,您希望为每一行创建副本,其中一列中给出了n值。n这是一种方法:


df["new_id"] = df.Variable.apply(lambda x: list(range(x)))

df = df.explode("new_id")

输出:


  Product  Year  Variable new_id

0       A  2018         2      0

0       A  2018         2      1

1       A  2019         4      0

1       A  2019         4      1

1       A  2019         4      2

1       A  2019         4      3

2       B  2018         2      0

2       B  2018         2      1

3       B  2019         3      0

3       B  2019         3      1

3       B  2019         3      2

熊猫 <= 0.24 的解决方案

如果由于某种原因,explode因为您使用的是旧版本的熊猫而不可用,您可以执行以下操作:


cols = df.columns


def make_df(r):

    d = {k: r[k] for k in cols}

    d["new_var"] = range(r["Variable"])

    res = pd.DataFrame(d)

    return res


dfs = []

for row in df.iterrows():

    dfs.append(make_df(row[1]))

    

pd.concat(dfs)

输出是相同的。


查看完整回答
反对 回复 2023-02-15
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信