Pandas:如何处理与数据关联的更高层次的层次索引?

yfjy0ee7  于 2022-12-28  发布在  其他
关注(0)|答案(1)|浏览(125)

我有一个Pandas Dataframe ,类似于(但远大于):

dob name                     x                     y
subject_code datapoint                                                       
subject1     0          2000  foo    1.0130617046645218   -0.9197554534168588
             1          2000  foo    1.6268826597606547    0.9235889343439213
             2          2000  foo  -0.27934495719523383   -0.7649336229271105
subject2     3          1980  bar     0.799986663648364   0.17376727917253385
             4          1980  bar   0.05939596855122923    1.6401662246395807
             5          1980  bar   -0.6496807099005506   -0.9591735410133281
             6          1980  bar   -0.6953680580655669  -0.15390936342856965

这是我从一个普通的csv文件中读取的,在该文件中,所有主题级属性(如这里的subject_codedobname)都使用命令df = pd.read_csv(PATH, index_col=["subject_code", "datapoint"])在每一列中重复。
目前,dob和名字在每一栏都重复,这似乎是不好的做法。我的问题有两个:
1.是否有办法将列dobname与更高级别的索引subject_code相关联,以便它们在同一个表中但不重复?
1.将subject_codedobname拉到一个单独的较小表中的最佳方法是什么?
关于(2),我现在是:

subject_cols = df.groupby("subject_code")\
                 .nunique()\
                 .max() == 1

subject_cols = subject_cols.index[subject_cols]

其中df[subject_cols]给出:

dob name
subject_code datapoint           
subject1     0          2000  foo
             1          2000  foo
             2          2000  foo
subject2     3          1980  bar
             4          1980  bar
k5ifujac

k5ifujac1#

下面的 Dataframe 是我从运行你的玩具例子中得到的:

print(df)
# Output
                         dob name                     x                     y
subject_code datapoint
subject1     0          2000  foo     0.513162983337374  0.007833678673477415
             1          2000  foo    1.5251357488726798   -0.2107782114549924
             2          2000  foo    -1.213546898092921   -0.9955113729604301
subject2     3          1980  bar  -0.19001014005197553    -0.863345548112192
             4          1980  bar   -0.7446186914220339    -0.388115467600475
             5          1980  bar  -0.04464842762041622   0.08245820701430223
             6          1980  bar    0.9529697829289847   -0.7613603252199205

您可以使用Pandas groupbyexplode完成第一项任务:
x一个一个一个一个x一个一个二个x
第二个任务是Pandasfrom_recordsreset_index
一个三个三个一个

相关问题