python - 按列扩展行,同时根据值操作其他行

标签 python pandas dataframe

我有一个像这样的数据框:

  column1  column2  column3
0       a        2        2
1       b        1        0
2       c        3        2

其中,第 3 列中的值必然 <= 第 2 列中的值

我想根据以下规则将 df 扩展到以下:

  column1  column2  column3
0       a        1        1
1       a        1        1
2       b        1        0
3       c        1        1
4       c        1        1
5       c        1        0
  1. 每一行都会扩展为等于其在第 2 列中的值的行数
  2. 如果扩展行的第 3 列索引(相对于第 1 列分组)小于第 3 列中原始未扩展行的值,则扩展行的第 3 列的值等于 1。

例如: 可以看到,column1=a 的行被扩展为 2 行,因为其 column2 值等于 2,并且生成的扩展行在 column3 中的值为 1,因为 0 < 2 且 1 < 2。

可以看到,column1=c 的行被扩展为 3 行,因为它的 column2 值等于 3,但是,只有前 2 个结果扩展行在 column3 中的值为 1(同样:0 < 2 且 1 < 2) 然而,第三个扩展行的第 3 列的值为 0,因为(是的,是的,是的,这不是幼儿园数学)2 < 2 是不正确的。

我可以在第一个给定的数据帧上使用什么函数来获得类似于第二个数据帧的结果?

最佳答案

np.repeat + cumcount

u = pd.DataFrame(np.repeat(df.values, df.column2, axis=0), columns=df.columns)

u.assign(
  column2=1,
  column3=(u.column3 > u.groupby('column1').cumcount()).astype(int)
)

  column1  column2  column3
0       a        1        1
1       a        1        1
2       b        1        0
3       c        1        1
4       c        1        1
5       c        1        0

关于python - 按列扩展行,同时根据值操作其他行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56998834/

相关文章:

python - 如何在 Python 中迭代 Queue.Queue 项目?

python-3.x - Python - 计算数据框列的标准偏差(行级)

python - 根据列值对数据框行重新排序

r - 为每个患者寻找最接近的匹配时间

python - 寻找一个字典值,如果不存在 - 运行另一个模块

python - 将 xlsx 上传到 Google 云端硬盘共享文件夹

python - 将函数逐元素应用于两个 DataFrame

python - 未知的字符问题�

python - 基于多索引的多个级别有效地连接两个数据帧

mysql - 从数据库中获取表的 spark 代码