我有以下df
w1 w2 w3 w4 w5 w6 w7 w8 w9 B
2 5 8 4 2 3 1 2 8 3
5 1 4 3 8 3 1 2 3 5
我想添加C列。C的值取决于B中的值和相应的列位置(“第B个”列)。 结果应如下所示:
w1 w2 w3 w4 w5 w6 w7 w8 w9 B C
2 5 8 4 2 3 1 2 8 3 4
5 1 4 3 8 3 1 2 3 5 3
答案 0 :(得分:3)
要做:
df['C'] = df.values[np.arange(len(df)), df.B.values]
print(df)
输出
w1 w2 w3 w4 w5 w6 w7 w8 w9 B C
0 2 5 8 4 2 3 1 2 8 3 4
1 5 1 4 3 8 3 1 2 3 5 3
答案 1 :(得分:1)
如果只想匹配w
列,请先添加DataFrame.filter
,然后转换为numpy数组并使用索引:
df['C'] = df.filter(like='w').values[np.arange(len(df)), df['B'].values]
print (df)
w1 w2 w3 w4 w5 w6 w7 w8 w9 B C
0 2 5 8 4 2 3 1 2 8 3 4
1 5 1 4 3 8 3 1 2 3 5 3
或者如果要在w
之后使用数字DataFrame.lookup
匹配数字,但是有必要通过添加B
来更改1
的值,转换为字符串并在w
前面加上:
df['C'] = df.lookup(df.index, df['B'].add(1).astype(str).radd('w'))
print (df)
w1 w2 w3 w4 w5 w6 w7 w8 w9 B C
0 2 5 8 4 2 3 1 2 8 3 4
1 5 1 4 3 8 3 1 2 3 5 3