如何处理Pandas的非变性数据?

2024-05-12 20:34:58 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我必须说我对Python和Pandas还比较陌生,但是我想在将来更多地使用它们,因此我正在尝试。由于我的工作,我经常使用Excel,经常遇到这样的问题:数据(行)有它们的属性(列),但有时一些数据(行)可能有第三维度。下面是一个简单的熊猫数据帧示例来说明我的意思:

df = pd.DataFrame(data={"obs":[["test1","test2"],"test1"],
                   "result":[[101,103],200]},index=["subj1","subj2"])
df

                  obs      result
subj1  [test1, test2]  [101, 103]
subj2           test1         200

你一般是怎么处理的?我读过术语“整理数据”,其中每个值都应该有自己的单元格。我应该为每个异常主题添加列=>;obs1、obs2、result1、result2还是添加行,例如:subject1\u 1、subject1\u 2由于属性(列)保持不变,什么更有意义。多重索引在这里有意义吗?我读了一点,但我还不知道如何有效地使用它们。我一直在寻找那个话题,但什么也帮不了我。你知道吗


Tags: 数据示例pandasdf属性resultexcelpd
1条回答
网友
1楼 · 发布于 2024-05-12 20:34:58

在你的例子中,我认为subj不是一个好的索引。我建议使用数值增量索引或多索引。以后更容易处理。举个例子:

df = pd.DataFrame(
    data={
        'subj':["subj1","subj1", "subj1", "subj1", "subj2", "subj2","subj2", "subj2", "subj3", "subj3"] ,
        "obs":["test1","test2","test2","test1",'test1','test1','test2','test2','test1','test2'],
        "result":[101,103,105,110, 203,159,193,285,400,543] 
    }
)
df
    subj    obs  result
0  subj1  test1     101
1  subj1  test2     103
2  subj1  test2     105
3  subj1  test1     110
4  subj2  test1     203
5  subj2  test1     159
6  subj2  test2     193
7  subj2  test2     285
8  subj3  test1     400
9  subj3  test2     543

让我们考虑一下,您要计算每个唯一主题的平均结果。因为所有数据点都有自己的行,所以可以使用panda的函数:groupbymean。你知道吗

df.groupby('subj').mean()
       result
subj         
subj1  104.75
subj2  210.00
subj3  471.50

或者如果你想计算每个主题和对象的平均值

df.groupby(['subj','obs']).mean()
             result
subj  obs          
subj1 test1   105.5
      test2   104.0
subj2 test1   181.0
      test2   239.0
subj3 test1   400.0
      test2   543.0

如果您在从excel导入数据后遇到列表中的数据点,我建议您编写一个函数,将1中的n行和跨1个轴的apply行组合起来

希望有帮助!你知道吗

相关问题 更多 >