gpt4 book ai didi

python - pandas 数据框,并对 n 个最常见的值使用 idmax()

转载 作者:行者123 更新时间:2023-12-01 04:35:22 25 4
gpt4 key购买 nike

我有一个 pandas 数据框,其中包含行的星期几和列的名称。数据框中的整数表示该人在该工作日进入商店的次数。它看起来像这样:

    names   'Martha'  'Johnny'  'Chloe'  'Tim'
'Mon' 3 2 0 7
'Tue' 0 0 3 0
'Wed' 1 12 3 0
'Thu' 5 0 3 0

我希望针对每个客户,对他们一周中倾向于购物的日子进行排名,并选择前两名。如果出现重复(例如 Chloe),顺序并不重要,只要选择三种可能性中的两种即可。如果有人只在一天去过商店(例如蒂姆),我希望第二个位置为空。这是我想要的输出:

    names  'Most frequent'   '2nd most freq'
'Martha' 'Thu' 'Mon'
'Johnny' 'Wed' 'Mon'
'Chloe' 'Tue' 'Thu'
'Tim' 'Mon' NaN

我见过类似的问题询问有关扩展 argmax() 的问题,但没有询问有关扩展 idmax() 的问题。

我当前的计划(伪代码):

    for customer in dataframe:
for i = 0,1:
if all elements zero:
newdataframe[customer, i] = NaN
else:
newdataframe[customer, i] = dataframe.idxmax()[customer]
dataframe[dataframe.idxmax()[customer], customer] = 0
return newdataframe

我想象一个比我更有经验的人可能会更有效地做到这一点。你怎么认为?有没有更有效的方法?

最佳答案

由于您还需要第二个最频繁的日期,因此您可以定义一个自定义函数来对每列进行排序。

# your data
# ===========================
df

Martha Johnny Chloe Tim
Mon 3 2 0 7
Tue 0 0 3 0
Wed 1 12 3 0
Thu 5 0 3 0

# processing
# ======================
def func(col):
# sort index according column values
idx_sorted, _ = zip(*sorted(zip(col.index.values, col.values), key=lambda x: x[1]))
return pd.Series({'most_frequent': idx_sorted[-1], 'second_most_freq': idx_sorted[-2]})

df.apply(func).T

most_frequent second_most_freq
Martha Thu Mon
Johnny Wed Mon
Chloe Thu Wed
Tim Mon Thu

编辑:

# processing
# ======================
import numpy as np

def func(col):
# sort index according column values
col = col[col > 0]
idx_sorted, _ = zip(*sorted(zip(col.index.values, col.values), key=lambda x: x[1]))
d = dict(zip(np.arange(len(idx_sorted)), idx_sorted[::-1]))
return pd.Series({'most_frequent': d.get(0, np.nan), 'second_most_freq': d.get(1, np.nan)})

df.apply(func).T

most_frequent second_most_freq
Martha Thu Mon
Johnny Wed Mon
Chloe Thu Wed
Tim Mon NaN

关于python - pandas 数据框,并对 n 个最常见的值使用 idmax(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31793372/

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