我是最近开始使用Python 3进行数据管理的R用户。我正在努力根据条件扩展/复制数据框行。我还需要能够以可变的方式扩展行。我将用这个例子来说明。
我有这些数据:
df = pd.DataFrame([[1, 10], [1,15], [2,10], [2, 15], [2, 20], [3, 10], [3, 15]], columns = ['id', 'var'])
df
Out[6]:
id var
0 1 10
1 1 15
2 2 10
3 2 15
4 2 20
5 3 10
6 3 15
我想扩展ID == 1和ID == 3的行。我还想扩展每个ID == 1行,每行1个重复,我想扩展每个ID == 3行每个重复两次。结果如下:
df2
Out[8]:
id var
0 1 10
1 1 10
2 1 15
3 1 15
4 2 10
5 2 15
6 2 20
7 3 10
8 3 10
9 3 10
10 3 15
11 3 15
12 3 15
13 3 15
我一直在尝试使用np.repeat,但我没有想到一种可以同时使用ID条件和变量复制数的方法。索引排序在这里无关紧要,只是行被正确复制。如果这是一个简单的问题,我会提前道歉。在此先感谢您的帮助,并随时提出澄清问题。
答案 0 :(得分:1)
这应该这样做:
dup = {1: 1, 3:2} #what value and how much to add
res = df.copy()
for k, v in dup.items():
for i in range(v):
res = res.append(df.loc[df['id']==k], ignore_index=True)
res.sort_values(['id', 'var'], inplace=True)
res.reset_index(inplace=True, drop=True)
res
# id var
#0 1 10
#1 1 10
#2 1 15
#3 1 15
#4 2 10
#5 2 15
#6 2 20
#7 3 10
#8 3 10
#9 3 10
#10 3 15
#11 3 15
#12 3 15
P.S。您所需的解决方案的7
值为id 3
,而您的描述意味着6
值。
答案 1 :(得分:1)
我认为下面的代码可以完成你的工作:
df_1=df.loc[df.id==1]
df_3=df.loc[df.id==3]
df1=df.append([df_1]*1,ignore_index=True)
df1.append([df_3]*2,ignore_index=True).sort_values(by='id')
id var
0 1 10
1 1 15
7 1 10
8 1 15
2 2 10
3 2 15
4 2 20
5 3 10
6 3 15
9 3 10
10 3 15
11 3 10
12 3 15