使用DataFrame.lookup获取行,其中列名是字符串的子集

时间:2018-10-22 16:58:14

标签: python python-3.x pandas dataframe filter

假设有一个简单的数据框,如下所示:

data = {'grades Feb':[10,20,30,40,50], 'grades
Jan':[5,10,15,20,25],'grades
April':[1,2,3,4,5],'months':['Feb','April','Jan','Feb','April']} 
df=pd.DataFrame(data) df.lookup(df.index,df.months)

我希望代码的输出像这样

array([10,  2, 15, 40,  5], dtype=int64)

在不更改列名以使其等同于“ months”列中的名称或更改“ months”列名称的情况下, 我只想提取存在名称的列中的行值我的“月份”列值的一部分。 如何使用常规耗时或数据框函数来完成此操作。 PS:这是一个简单的示例,用于说明我的问题比不能简单地更改列名的问题更大。

2 个答案:

答案 0 :(得分:3)

使用lookup并重新创建列的键

df.lookup(df.index,'grades '+ df.months)
Out[1070]: array([10,  2, 15, 40,  5], dtype=int64)

答案 1 :(得分:2)

使用df.lookup执行此操作:

v = df.filter(like='grades').rename(columns=lambda x: x.split()[1])
print(v)
   Feb  Jan  April
0   10    5      1
1   20   10      2
2   30   15      3
3   40   20      4
4   50   25      5

grades = v.lookup(df.index, df.months)

print(grades)
array([10,  2, 15, 40,  5])