我是一个python初学者,试图复制现有的行,同时在新列中添加区分信息。目前,我的DataFrame是这样的:
Patient Visit
1 V1
1 V2
1 V3
2 V1
2 V2我想添加一个新列Test,对于V1,它需要Test 1,但是对于V2和V3,它同时需要Test 1和Test 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然后,我想进一步添加一个列Sample,它为每个测试添加一个A和B示例:
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如何在其他列中添加新信息的同时复制行?谢谢你的帮助!!
发布于 2021-01-10 00:20:11
您可以手动创建您的访问-测试-样本数据帧,然后使用患者数据帧进行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')输出:
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发布于 2021-01-10 04:25:15
尝试使用explode一步一步地呈现以下内容:
创建DF:
t = pd.DataFrame({'Patient': [1,1,1,2,2],
'Visit': ['V1', 'V2', 'V3', 'V1', 'V2']})
Patient Visit
0 1 V1
1 1 V2
2 1 V3
3 2 V1
4 2 V2添加测试列:
t['Test'] = t['Visit'].apply(lambda x: ['Test 1'] if x == 'V1' else ['Test 1', 'Test 2'])
Patient Visit Test
0 1 V1 [Test 1]
1 1 V2 [Test 1, Test 2]
2 1 V3 [Test 1, Test 2]
3 2 V1 [Test 1]
4 2 V2 [Test 1, Test 2]使用explode将每个测试作为其自己的行:
t = t.explode('Test') # Since this cannot be done inline you need to copy this to the original DF.
Patient Visit Test
0 1 V1 Test 1
1 1 V2 Test 1
1 1 V2 Test 2
2 1 V3 Test 1
2 1 V3 Test 2
3 2 V1 Test 1
4 2 V2 Test 1
4 2 V2 Test 2对“Sample”列执行相同的操作:添加“Sample”列:
t['Sample'] = t['Test'].apply(lambda x: ['A', 'B'])Explode‘示例列:
t = t.explode('Sample')以下是最终输出:
Patient Visit Test Sample
0 1 V1 Test 1 A
0 1 V1 Test 1 B
1 1 V2 Test 1 A
1 1 V2 Test 1 B
1 1 V2 Test 2 A
1 1 V2 Test 2 B
2 1 V3 Test 1 A
2 1 V3 Test 1 B
2 1 V3 Test 2 A
2 1 V3 Test 2 B
3 2 V1 Test 1 A
3 2 V1 Test 1 B
4 2 V2 Test 1 A
4 2 V2 Test 1 B
4 2 V2 Test 2 A
4 2 V2 Test 2 Bhttps://stackoverflow.com/questions/65644664
复制相似问题