Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Pandas阻止长度为10帧的平均数据帧?_Python_Python 3.x_Pandas_Pandas Groupby - Fatal编程技术网

Python 如何使用Pandas阻止长度为10帧的平均数据帧?

Python 如何使用Pandas阻止长度为10帧的平均数据帧?,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我对熊猫不熟悉。所以我想知道是否有更好的方法来完成这项任务 我有如下格式的数据框: 这是来自分子动力学的DNA模拟数据 数据集如下所示: 这里总共有1000帧,我的目的是得到每10帧的平均值,所以,最后,我希望数据如下: Block Base1 Base2 Shear Stretch Stagger ..... 1 1 66 XX XX XX 1 2 65 XX XX XX ... ... ...

我对熊猫不熟悉。所以我想知道是否有更好的方法来完成这项任务

我有如下格式的数据框:

这是来自分子动力学的DNA模拟数据

数据集如下所示:

这里总共有1000帧,我的目的是得到每10帧的平均值,所以,最后,我希望数据如下:

Block  Base1 Base2 Shear Stretch Stagger .....
 1     1      66     XX    XX     XX
 1     2      65     XX    XX     XX
...   ...     ...    ...   ...    ...
 1     33     34     XX    XX     XX

 2     1      66     XX    XX     XX
 2     2      65     XX    XX     XX
...   ...     ...    ...   ...    ...
 2     33     34     XX    XX     XX

 3     1      66     XX    XX     XX
 3     2      65     XX    XX     XX
...   ...     ...    ...   ...    ...
 3     33     34     XX    XX     XX


 4     1      66     XX    XX     XX
 4     2      65     XX    XX     XX
...   ...     ...    ...   ...    ...
 4     33     34     XX    XX     XX
其中块1表示1~10帧的平均值,块2表示11~20帧的平均值

虽然,我认为通过仔细分配每行的索引,我可以完成这些任务,但我想知道是否有一些方便的方法来完成这项任务。我查看了一些关于
pandas
by中
groupby
函数的网页,似乎没有将该组每10行设置一个块平均值函数

谢谢大家!

===================================================================================================================

很抱歉,我没有明确说明我的目的,我已经找到了完成任务的方法,并提供了一个示例输出,以更好地说明我的目的

对于双链DNA,我们知道它是带有AGCT的双螺旋结构,因此Base1表示DNA的一个碱基,Base2表示另一条链的互补碱基。两个相应的碱基通过氢键连接在一起

比如:

所以这里在
BPdata.csv
中,Base1和Base2的每一个组合都意味着一对DNA碱基

在这里的
BPdata.csv
中,这是一个33碱基对DNA,在不同的时间范围内模拟,标记为1,2,3,4…1000

然后我想把每10个时间帧分组在一起,比如1~10,11~20,21~30……,在每组中,对每个碱基对进行平均

以下是我得出的数据:

    # -*- coding: utf-8 -*-

    import pandas as pd

    '''

    Data Input

    '''


    # Import CSV data to Python


    BPdata = pd.read_csv("BPdata.csv", delim_whitespace = True, skip_blank_lines = False)
    BPdata.rename(columns={'#Frame':'Frame'}, inplace=True)

    '''

    Data Processing

    '''
    # constant block average parameters
    Interval20ns = 10
    IntervalInBPdata = 34


    # BPdataBlockAverageSummary
    LEN_BPdata = len(BPdata)

    # For Frame 1
    i = 1
    indexStarting = 0
    indexEnding =  0  

    indexStarting = indexEnding
    indexEnding =  Interval20ns * IntervalInBPdata * i - 1

    GPtemp = BPdata.loc[indexStarting : indexEnding]
    GPtemp['Frame'] = str(i)
    BPdata_blockOF1K_mean = GPtemp.groupby(['Frame','Base1','Base2']).mean()
    BPdata_blockOF1K_mean.loc[len(BPdata_blockOF1K_mean)] = str(i)
    # For Frame 2 and so on
    i = i + 1
    indexStarting = indexEnding + 1
    indexEnding =  Interval20ns * IntervalInBPdata * i - 1
    while ( indexEnding <= LEN_BPdata - 1):
        GPtemp = BPdata.loc[indexStarting : indexEnding]
        GPtemp['Frame'] = str(i)
        meanTemp = GPtemp.groupby(['Frame','Base1','Base2']).mean()
        meanTemp.loc[len(meanTemp)] = str(i)    
        BPdata_blockOF1K_mean = pd.concat([BPdata_blockOF1K_mean,meanTemp])
        i = i + 1
        indexStarting = indexEnding + 1
        indexEnding =  Interval20ns * IntervalInBPdata * i - 1
#-*-编码:utf-8-*-
作为pd进口熊猫
'''
数据输入
'''
#将CSV数据导入Python
BPdata=pd.read\u csv(“BPdata.csv”,delim\u空格=True,skip\u空白行=False)
重命名(列={'#Frame':'Frame'},inplace=True)
'''
数据处理
'''
#常数块平均参数
间隔20ns=10
IntervalInBPdata=34
#BPdataBlockAverageSummary
LEN_BPdata=LEN(BPdata)
#第1帧
i=1
索引开始=0
指数化=0
索引开始=索引结束
indexEnding=间隔20ns*间隔pData*i-1
GPtemp=BPdata.loc[索引开始:索引结束]
GPtemp['Frame']=str(i)
BPdata_blockOF1K_mean=GPtemp.groupby(['Frame','Base1','Base2']).mean()
BPdata_blockOF1K_mean.loc[len(BPdata_blockOF1K_mean)]=str(i)
#对于第2帧,依此类推
i=i+1
索引开始=索引结束+1
indexEnding=间隔20ns*间隔pData*i-1

而熊猫中的while(indexEnding分组有多种方法。其中一种方法是传递一个序列。因此,可以传递一个具有10行块值的序列。解决方案如下:

import pandas as pd
import numpy as np

#create datafram with 1000 rows
df = pd.DataFrame(np.random.rand(1000, 1)

#create series for grouping
groups_of_ten = pd.Series(np.repeat(range(int(len(df)/10)), 10))

#group the data
grouped = df.groupby(groups_of_ten)

#aggregate
grouped.agg('mean')
分组系列在内部看起来如下所示:

In [21]: groups_of_ten.head(20)
Out[21]:
0     0
1     0
2     0
3     0
4     0
5     0
6     0
7     0
8     0
9     0
10    1
11    1
12    1
13    1
14    1
15    1
16    1
17    1
18    1
19    1

熊猫分组有多种方式。其中一种方式是传递一个序列。因此,可以传递一个具有10行块值的序列。解决方案如下:

import pandas as pd
import numpy as np

#create datafram with 1000 rows
df = pd.DataFrame(np.random.rand(1000, 1)

#create series for grouping
groups_of_ten = pd.Series(np.repeat(range(int(len(df)/10)), 10))

#group the data
grouped = df.groupby(groups_of_ten)

#aggregate
grouped.agg('mean')
分组系列在内部看起来如下所示:

In [21]: groups_of_ten.head(20)
Out[21]:
0     0
1     0
2     0
3     0
4     0
5     0
6     0
7     0
8     0
9     0
10    1
11    1
12    1
13    1
14    1
15    1
16    1
17    1
18    1
19    1

假设您的数据帧被称为
df
,您可以执行:
df.groupby(df['#Frame']//10).mean()
。此外,您可能应该将列
#Frame
重命名为just
Frame
@Abdou,Thx,我已经更新了描述。现在出现了一些新问题。假设您的数据帧名为
df
,您可以执行:
df.groupby(df['#Frame']//10.mean()
。另外,您可能应该将列
#Frame
重命名为just
Frame
@Abdou,Thx,我已经更新了描述。现在出现了一些新问题。嗨,@Woody Pride,我尝试了您的解决方案,但结果如下:`Frame Base1 Base2剪切拉伸交错扣\0 485。80315316.995941 50.004059 0.017325-0.042114 0.067136 1.731197`但我想保持第一帧的原始结构。例如,我不仅要保持Base1 Base2记录的平均值,还要保持Base2记录的每个平均值。恐怕我不理解你的问题。如果你想用一个小的可复制的ex更新你的问题充足且预期的输出,然后可能有人会发布更完整的解决方案。嗨,@Woody Pride,我尝试过你的解决方案,但结果如下:“#Frame Base1 Base2剪切拉伸交错扣\0 485.80315316.995941 50.004059 0.017325-0.042114 0.067136 1.731197`但我想保持o第一帧的原始结构。例如,我不仅要保留Base1 Base2记录的平均值,还要保留每个平均值。恐怕我不理解你的问题。如果你想用一个小的可复制示例和预期输出更新你的问题,那么也许有人会发布一个更完整的解决方案。