如何在数据框中获取某个值的列名

时间:2019-12-18 05:26:28

标签: python pandas

我有一张这样的桌子

uid|store_1_@_A|store_2_%_7_B|store_3_&_9_C
---------------------------------------
1  |3          |4            |5
2  |20         |1            |9
3  |4          |88           |49    

我想像这样形成一个新表:

uid|store_1_@_A|store_2_%_7_B|store_3_&_9_C|favorite_store
------------------------------------------------------
1  |3          |4            |5            |C
2  |20         |1            |9            |A
3  |4          |88           |49           |B

favorite_store是一个新变量。对于每个uid,请检查三个存储的值,然后找到一个值最高的存储,例如:uid = 1,最大值= 5,属于store_3 _&_ 9_C,所以favorite_store = C

df = pd.DataFrame({'uid':[1,2,3],
                   'store_1_@_A':[3,20,4],
                   'store_2_%_7_B':[4,1,88],
                   'store_3_&_9_C':[5,9,49]})

我使用df.iloc[0].max()来获取第一行的最大值,但我不知道如何进行。 如果要获取商店名称中的最后一个字符,我正在考虑使用最后一个'_'。例如re.findall('[^\_]+$', 're.findall('[^\_]+$', 'store_3_A')[0]')[0]可能有效。

3 个答案:

答案 0 :(得分:2)

使用idxmax

df['favorite_store'] = df.idxmax(axis=1)

答案 1 :(得分:1)

尝试一下:

df['favorite_store'] = df.T.idxmax()                                                                                                                                                

In [5248]: df                                                                                                                                                                                  
Out[5248]: 
   uid  store_1  store_2  store_3 favorite_store
0    1        3        4        5        store_3
1    2       20        1        9        store_1
2    3        4       88       49        store_2

or

df['favorite_store'] = df.T.idxmax().str.extract(r'store_(\d+)')                                                                                                                    

In [5266]: df                                                                                                                                                                                  
Out[5266]: 
   uid  store_1  store_2  store_3 favorite_store
0    1        3        4        5              3
1    2       20        1        9              1
2    3        4       88       49              2

答案 2 :(得分:0)

尝试一下:

import pandas as pd
df = pd.DataFrame({'uid':[1,2,3],
               'store_1':[3,20,4],
               'store_2':[4,1,88],
               'store_3':[5,9,49]})

fav_full = (df.idxmax(axis=1))
fav_value = []
for ele in fav_full:
    fav_value.append(ele[6:])
df['Favourite column'] = (fav_value)
print (df)

必须有一种更清洁的方法来执行此操作。但是,如果您所有的“商店”标头都采用以下格式,则该方法将起作用:store_x