Python Pandas:具有灵活列位置的iloc

时间:2019-11-21 11:17:31

标签: python pandas indexing

我有以下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

2 个答案:

答案 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