考虑以下数据框;
df = pd.DataFrame(
{'X':('a','b','c','d'),
'Y':('a','b','d','e'),
'Z':('a','b','c','d'),
'#':(1,2,1,3)
})
df
我想在“#”列中附加数字大于 1 的行,并在该行中的数字减 1。 df 最好应该
然后看起来像这样;
或者它可能看起来像这样(行完全相乘);
顺便说一句,我已经广泛搜索了这个问题,但找不到任何可以帮助我朝正确方向发展的东西。
Use numpy.repeat https://docs.scipy.org/doc/numpy/reference/generated/numpy.repeat.html:
c = df.columns[1:]
df = pd.DataFrame(np.repeat(df.values, df['#'], axis=0)[:, 1:], columns=c)
print (df)
X Y Z
0 a a a
1 b b b
2 b b b
3 c d c
4 d e d
5 d e d
6 d e d
Similar:
df = pd.DataFrame(np.repeat(df.values, df['#'], axis=0), columns=df.columns)
print (df)
# X Y Z
0 1 a a a
1 2 b b b
2 2 b b b
3 1 c d c
4 3 d e d
5 3 d e d
6 3 d e d
但如果顺序很重要:
dfs = []
for i in range(df['#'].max()):
df = df[df['#'] > 0].copy()
df['#'] -= 1
dfs.append(df.iloc[:, 1:])
df1 = pd.concat(dfs, ignore_index=True)
print (df1)
X Y Z
0 a a a
1 b b b
2 c d c
3 d e d
4 b b b
5 d e d
6 d e d
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)