我有一个像这样的数据框:
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
- 每一行都会扩展为等于其在第 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/