Python 3.x 根据条件扩展/复制数据帧行
我是一个R用户,最近开始使用Python3进行数据管理。我正在努力寻找一种基于条件扩展/复制数据帧行的方法。我还需要能够以可变的方式展开行。我将用这个例子来说明 我有以下数据: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
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,是的,我测试了它并得到了想要的输出。但是你的代码是有效的。谢谢