我有一个看起来像这样的 DF。
每个 id 都有列数。逻辑是查看 T1 并检查程序是否已在 T0 看到。根据发现,将创建一个新列。如果在 T0 找到,则新列将具有相同的name
. 如果在 T0 处没有看到,则name
增加,所以它将是_2
。
Python
data = '''id, name, Time, program
1, bb, T0, a1
1, ch, T0, a1
1, cc, T0, b1
1, ch_1, T1, a1
1, ch_1, T1, a2
1, ch_1, T1, a3
1, ch_1, T1, a4
1, cc_1, T1, b1
1, cc_1, T1, b2
1, cc_1, T1, b3
2, dd, T0, c1
2, ch, T0, a1
2, cc, T0, b1
2, ch_1, T1, a1
2, ch_1, T1, a2
2, ch_1, T1, a3
2, cc_1, T1, b1
2, cc_1, T1, b2
2, cc_1, T1, b3'''
da = [[i.strip() for i in l.split(",")] for l in data.split("\n")]
df = pd.DataFrame(da[1:], columns=da[0])
输出
id name Time program
1 bb T0 a1
1 ch T0 a1
1 cc T0 b1
1 ch_1 T1 a1
1 ch_1 T1 a2
1 ch_1 T1 a3
1 ch_1 T1 a4
1 cc_1 T1 b1
1 cc_1 T1 b2
1 cc_1 T1 b3
2 dd T0 c1
2 ch T0 a1
2 cc T0 b1
2 ch_1 T1 a1
2 ch_1 T1 a2
2 ch_1 T1 a3
2 cc_1 T1 b1
2 cc_1 T1 b2
2 cc_1 T1 b3
这是最终的预期输出。
id name Time program new_name
1 bb T0 a1 bb
1 ch T0 a1 ch
1 cc T0 b1 cc
1 ch_1 T1 a1 ch_1
1 ch_1 T1 a2 ch_2 <---
1 ch_1 T1 a3 ch_2 <---
1 ch_1 T1 a4 ch_2 <---
1 cc_1 T1 b1 cc_1
1 cc_1 T1 b2 cc_2 <---
1 cc_1 T1 b3 cc_2 <---
2 dd T0 c1 dd
2 ch T0 a1 ch
2 cc T0 b1 cc
2 ch_1 T1 a1 ch_1
2 ch_1 T1 a2 ch_2 <---
2 ch_1 T1 a3 ch_2 <---
2 cc_1 T1 b1 cc_1
2 cc_1 T1 b2 cc_2 <---
2 cc_1 T1 b3 cc_2 <---