Python Pandas MultiIndexing:复制行并在新列中添加区分信息

Oli*_*ver 2 python pandas

我是一名 python 初学者,试图复制现有行,同时在新列中添加区分信息。目前,我的 DataFrame 看起来像这样:

Patient  Visit
      1     V1
      1     V2
      1     V3
      2     V1
      2     V2
Run Code Online (Sandbox Code Playgroud)

我想添加一个新列Test,它 for V1requires Test 1,但 for V2andV3需要Test 1Test 2

Patient  Visit    Test
      1     V1  Test 1
      1     V2  Test 1
      1     V2  Test 2
      1     V3  Test 1
      1     V3  Test 2
      2     V1  Test 1
      2     V2  Test 1
      2     V2  Test 2
Run Code Online (Sandbox Code Playgroud)

然后我还想添加一个列Sample,为每个测试添加一个AB示例:

Patient  Visit    Test  Sample
      1     V1  Test 1       A
      1     V1  Test 1       B
      1     V2  Test 1       A
      1     V2  Test 1       B
      1     V2  Test 2       A
      1     V2  Test 2       B
...
      2     V2  Test 2       A
      2     V2  Test 2       B
Run Code Online (Sandbox Code Playgroud)

在附加列中添加新信息时如何复制行?感谢您的帮助!!

Sco*_*ton 5

您可以手动创建您的访问测试样本数据框,然后merge使用患者数据框:

pd.MultiIndex.from_product([['V2','V3'],['Test 1', 'Test 2'],['A', 'B']], names=['Visit', 'Test', 'Sample'])\
  .union(pd.MultiIndex.from_product([['V1'],['Test 1'],['A','B']], names=['Visit', 'Test', 'Sample']))\
  .to_frame().reset_index(drop=True)\
  .merge(df, on='Visit')\
  .sort_values('Patient')
Run Code Online (Sandbox Code Playgroud)

输出:

   Visit    Test Sample  Patient
0     V1  Test 1      A        1
2     V1  Test 1      B        1
4     V2  Test 1      A        1
6     V2  Test 1      B        1
8     V2  Test 2      A        1
10    V2  Test 2      B        1
12    V3  Test 1      A        1
13    V3  Test 1      B        1
14    V3  Test 2      A        1
15    V3  Test 2      B        1
1     V1  Test 1      A        2
3     V1  Test 1      B        2
5     V2  Test 1      A        2
7     V2  Test 1      B        2
9     V2  Test 2      A        2
11    V2  Test 2      B        2
Run Code Online (Sandbox Code Playgroud)