我有一个熊猫数据框,看起来像这样: 数据由3份副本组成,如第一列所示。这些拷贝中的每一个都包含相同的元素,即它们每个都有2个序列,这些序列又由3种不同的类型组成:A、R2和R3。你知道吗
Copy sequence type ntv
1 1 A 0.45
1 1 R2 0.878
1 1 R3 1.234
1 2 A -7.890
1 2 R2 2.345
1 2 R3 -0.871
2 1 A -0.098
2 1 R2 -0.007
2 1 R3 9.089
2 2 A 1.567
2 2 R2 -0.764
2 2 R3 17.908
3 1 A 4.980
3 1 R2 2.34
3 1 R3 1.280
3 2 A -9.189
3 2 R2 -7.09
3 2 R3 -0.009
我想创建一个如下所示的数据帧,这样对于同一副本中的每个序列,R2和R3的平均值在新行中作为类型“R”给出。我的意思是,例如在拷贝1中,我如何找到每个序列的R2和R3的平均值。你知道吗
Copy sequence type ntv
1 1 A 0.45
1 1 R2 0.878
1 1 R3 1.234
1 1 R 1.056
1 2 A -7.890
1 2 R2 2.345
1 2 R3 -0.871
1 2 R 0.737
2 1 A -0.098
2 1 R2 -0.007
2 1 R3 9.089
2 1 R 4.541
2 2 A 1.567
2 2 R2 -0.764
2 2 R3 17.908
2 2 R 8.572
3 1 A 4.980
3 1 R2 2.34
3 1 R3 1.280
3 1 R 1.81
3 2 A -9.189
3 2 R2 -7.09
3 2 R3 -0.009
3 2 R -3.549
以下是我目前掌握的代码:
avg_type = [(('R2','R3'),'R')]
for i in set(df['Copy']):
cp = df[df['Copy'] == i]
for i in set(df['sequence']):
seq = df[df['sequence'] == i]
for oldname, newname in avg_type:
avg = seq.loc[seq['type'].isin(oldname)]
if len(avg) > 1:
newrow = avg.loc[avg.index[0]]
newrow['ntv'] = avg['ntv'].mean()
newrow['type'] = newname
df.loc[-1] = newrow
df.index += 1
我只是设法弄清楚如何找到每个序列的R2和R3的平均值(换句话说,我得到的是2个值,而不是6个值),但即使是新行也没有按我所希望的那样正确放置。你知道吗
我如何扩展我的选择标准来考虑“拷贝”号呢?我将感谢任何帮助或指导如何去使用熊猫或Python一般。提前谢谢!你知道吗
试试这个:
这也将生成类型“R”。您可以像MaxU的函数一样附加、排序和分配类型“R”。你知道吗
相关问题 更多 >
编程相关推荐