问题标题可能无法准确反映问题,因为很难总结。它更容易显示。我正在尝试根据df中的列的值创建新列。这些值位于间歇索引点。它们将始终被标记或与其他列关联。
输入:
import pandas as pd
import numpy as np
k = 5
N = 10
df = pd.DataFrame({ 'Frame' : range(1, N + 1 ,1),
'A_X' : np.random.randint(k, k + 100 , size=N),
'A_Y' : np.random.randint(k, k + 100 , size=N),
'B_X' : np.random.randint(k, k + 100 , size=N),
'B_Y' : np.random.randint(k, k + 100 , size=N),
'C_X' : np.random.randint(k, k + 100 , size=N),
'C_Y' : np.random.randint(k, k + 100 , size=N),
'D_X' : np.random.randint(k, k + 100 , size=N),
'D_Y' : np.random.randint(k, k + 100 , size=N),
'E_X' : np.random.randint(k, k + 100 , size=N),
'E_Y' : np.random.randint(k, k + 100 , size=N),
'Events' : ['nan','A','nan','C','D','A','nan','nan','C','C']})
这将导致:
A_X A_Y B_X B_Y C_X C_Y D_X D_Y E_X E_Y Events Frame
0 95 61 76 47 22 38 54 19 64 13 nan 1
1 82 87 87 24 59 31 55 16 101 78 A 2
2 10 25 66 28 70 78 75 19 23 90 nan 3
3 55 64 15 11 46 87 65 51 10 92 C 4
4 53 103 10 65 103 86 24 49 33 34 D 5
5 12 44 89 14 28 26 17 55 64 76 A 6
6 69 24 73 12 84 71 71 76 5 18 nan 7
7 40 35 73 40 78 31 51 33 77 98 nan 8
8 65 69 83 33 20 90 64 12 19 84 C 9
9 24 70 18 96 65 67 73 42 49 78 C 10
前10列是XY数据。我想选择适当的XY值来创建新列。它们是通过“事件”列选择的。这些值将始终与其他列相对应。例如,第二行事件是“A”,因此我想从同一索引点的A列(A\u X,A\u Y)中获取X和Y值。Events中的下一个值是C,所以我想在第四行ect中输入(C\u X,C\u Y)。
因此,输出将:
A_X A_Y B_X B_Y C_X C_Y D_X D_Y E_X E_Y Events Frame X Y
0 95 61 76 47 22 38 54 19 64 13 nan 1 nan nan
1 82 87 87 24 59 31 55 16 101 78 A 2 82 87
2 10 25 66 28 70 78 75 19 23 90 nan 3 nan nan
3 55 64 15 11 46 87 65 51 10 92 C 4 46 87
4 53 103 10 65 103 86 24 49 33 34 D 5 24 49
5 12 44 89 14 28 26 17 55 64 76 A 6 12 44
6 69 24 73 12 84 71 71 76 5 18 nan 7 nan nan
7 40 35 73 40 78 31 51 33 77 98 nan 8 nan nan
8 65 69 83 33 20 90 64 12 19 84 C 9 20 90
9 24 70 18 96 65 67 73 42 49 78 C 10 65 67
我曾尝试写过这样的东西:
df['X'] = np.where(df['Events'] == ['A'])
df['Y'] = np.where(df['Events'] == ['A'])
然后对每个列字母重复此操作,但这不起作用,因为它们的标签不同。我想把X和Y合并在一起,给它们贴上标签['A','B','C','D','E]。
但我仍然错过了下一步。我没有从df返回值。