Python 3.x 根据条件扩展/复制数据帧行

Python 3.x 根据条件扩展/复制数据帧行,python-3.x,pandas,numpy,dataframe,Python 3.x,Pandas,Numpy,Dataframe,我是一个R用户,最近开始使用Python3进行数据管理。我正在努力寻找一种基于条件扩展/复制数据帧行的方法。我还需要能够以可变的方式展开行。我将用这个例子来说明 我有以下数据: 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

我是一个R用户,最近开始使用Python3进行数据管理。我正在努力寻找一种基于条件扩展/复制数据帧行的方法。我还需要能够以可变的方式展开行。我将用这个例子来说明

我有以下数据:

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行扩展为2个副本。结果如下所示:

 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条件和变量重复数。索引顺序在这里并不重要,只是行被适当地复制了。如果这是一个简单的问题,我提前道歉。提前感谢您的帮助,请随时提出澄清问题

这应该可以做到:

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

另外,您想要的解决方案具有
ID3
7
值,而您的描述暗示了
6
值。

我认为下面的代码完成了您的工作:

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

对不起!那是我的错别字。不管怎样,您的解决方案对于我更大的数据帧非常有效。谢谢你的时间和帮助。你试过这个吗?您只是将每个元素分别乘以1和2。测试一下,看看。我可以用Zipa的代码解决我的问题,但是谢谢你的帮助!这也是解决这个问题的一个有趣的方法。@Zipa,是的,我测试了它并得到了想要的输出。但是你的代码是有效的。谢谢