Как сократить эти коды? - PullRequest
0 голосов
/ 17 апреля 2020
ts.groupby(ts.index.date).count().reindex(idx, fill_value = np.nan)
ts.groupby(ts.index.date).mean().reindex(idx, fill_value = np.nan)
ts.groupby(ts.index.date).sum().reindex(idx, fill_value = np.nan)
ts.groupby(ts.index.date).max().reindex(idx, fill_value = np.nan)
ts.groupby(ts.index.date).min().reindex(idx, fill_value = np.nan)

Я ищу более умный способ перебора многих методов. Если бы это была строка, код можно написать гораздо более кратким способом

for i in ["count", "mean", "sum", "max", "min"]:
    "ts.groupby(ts.index.date).{}().reindex(idx, fill_value = np.nan)".format(i)

Ответы [ 4 ]

1 голос
/ 17 апреля 2020

Использование getattr :

for name in ("count", "mean", "sum", "max", "min"):
    func = getattr(ts.groupby(ts.index.date), name)
    func().reindex(idx, fill_value = np.nan)

Альтернативы:

Если и только если ts.groupby(ts.index.date) имеет одинаковый результат во всех выражениях, его можно оценить только один раз .

tsg = ts.groupby(ts.index.date)
for name in ("count", "mean", "sum", "max", "min"):
    getattr(tsg, name)().reindex(idx, fill_value = np.nan)

И некоторым легче читать:

for name in 'count mean sum max min'.split():
1 голос
/ 17 апреля 2020

Я думаю, что это должно работать:

[getattr(ts.groupby(ts.index.date), item)().reindex(idx, fill_value = np.nan) for item in ["count", "mean", "sum", "max", "min"]] 
1 голос
/ 17 апреля 2020

Попробуйте:

for i in ["count", "mean", "sum", "max", "min"]:
    exec(f"ts.groupby(ts.index.date).{i}().reindex(idx, fill_value = np.nan)")
0 голосов
/ 17 апреля 2020
# The first line is to execute what you want
ts.groupby(ts.index.date).agg(['count','mean','std','min','max']).reset_index()

#The second line is to remove multilevel columns
ts.columns = list(map('_'.join, ts.columns.values))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...