我有一个数据框df
如下:
id |
lob |
addr |
addr2 |
a1 |
001 |
1234 |
0 |
a1 |
001 |
1233 |
0 |
a3 |
003 |
1221 |
0 |
a4 |
009 |
1234 |
0 |
我想生成n
(让我们每个 id 取 4)行,其他列是null/na/nan
价值观。
因此,上表应改写为:
id |
lob |
addr |
addr2 |
a1 |
001 |
1234 |
0 |
a1 |
001 |
1233 |
0 |
a1 |
001 |
na |
na |
a1 |
na |
na |
na |
a3 |
003 |
1221 |
0 |
a3 |
na |
na |
na |
a3 |
na |
na |
na |
a3 |
na |
na |
na |
a4 |
009 |
1234 |
0 |
a4 |
na |
na |
na |
a4 |
na |
na |
na |
a4 |
na |
na |
na |
我怎样才能实现这个目标?执行时我将拥有 500-700 个 id,并且 n 始终为 70(因此每个 id 应该有 70 行)。
我想创建一个循环来创建一行,按 id 进行分组,看看它是否小于 70,然后重复该过程,但最终会执行很多不必要的操作。
下面是一个使用 Counter 来计算每个 ID 需要多少额外行的解决方案,然后仅附加新数据:
from collections import Counter
id_count = Counter(df['id'])
# Create lists of each id repeated the number of times each is needed:
n = 4
id_values = [[i] * (n - id_count[i]) for i in id_count.keys()]
# Flatten to a single list:
id_values = [i for s in id_values for i in s]
# Create as new DataFrame and append to existing data:
new_data = pd.DataFrame({"id": id_values})
df = df.append(new_data).sort_values(by="id")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)