gpt4 book ai didi

python - 如何根据 python 数据框中的行条件查找最接近的列名称?

转载 作者:行者123 更新时间:2023-12-04 14:55:25 24 4
gpt4 key购买 nike

所有 ID 都包含从 1 到 100 的等级。目的是了解日期期间的排名流程。

请帮忙!

1.如果值不为0但接近1,我想从左边找到第一个日期。

2.我想从右边找到最佳排名的最后日期。

3.我想在所有日期中找到最好的排名(最小值)。

输入

import datetime
d = {'ID': ["id1","id2"], '26-01-2021': [0, 15],'01-02-2021': [12, 17],'01-03-2021': [58, 17]}
df = pd.DataFrame(data=d)

ID 26-01-2021 01-02-2021 01-03-2021
id1 0 12 58
id2 15 17 17

期望输出

ID  26-01-2021  01-02-2021  01-03-2021  first_date_rank last_date_rank  best_latest_date_rank   best_rank
id1 0 12 58 01-02-2021 01-03-2021 01-02-2021 12
id2 15 17 17 26-01-2021 01-03-2021 26-01-2021 15

我试过 argmin 但它不起作用

def get_date(row):
date_range = row[dft.columns[1:]]
closest_value_key = abs(100 - date_range).argmin()
closest_date = date_range[closest_value_key]
column_name = date_range.keys()[closest_value_key]
return pd.Series((closest_date, column_name))

dft[['best_latest_date_rank', 'best_rank']] = dft.apply(lambda row:get_date(row), axis=1)

请帮忙!

最佳答案

你可以在这里做 idx max 和 idxmin 做一些改变:

u = df.set_index("ID").replace(0,np.nan)
first_date_rank = u.idxmin(1)
last_date_rank= u.iloc[:,::-1].idxmax(1)
best_rank = u.min(1)

out = u.assign(first_date_rank=first_date_rank, last_date_rank=last_date_rank,
best_latest_date_rank=first_date_rank,best_rank=best_rank).reset_index()

print(out)

ID 26-01-2021 01-02-2021 01-03-2021 first_date_rank last_date_rank \
0 id1 NaN 12 58 01-02-2021 01-03-2021
1 id2 15.0 17 17 26-01-2021 01-03-2021

best_latest_date_rank best_rank
0 01-02-2021 12.0
1 26-01-2021 15.0

关于python - 如何根据 python 数据框中的行条件查找最接近的列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68120067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com