Кто-нибудь может посоветовать, как перебрать каждый N-й элемент в словаре? По сути, у меня есть словарь фреймов данных, и я хочу иметь возможность создавать новый словарь на основе каждого третьего элемента фрейма данных (включая первый) на основе позиционирования индекса оригинала. Как только я это сделаю, я хотел бы объединить кадры данных вместе.

Так, например, если у меня есть 12 фреймов данных, я бы хотел, чтобы новый фрейм данных содержал первый, четвертый, седьмой, десятый и т. д.

Заранее спасибо!

0
Adam 4 Окт 2022 в 21:39
2
Почему вы используете словарь, а не список, если хотите индексировать по позиции?
 – 
mozway
4 Окт 2022 в 21:44

2 ответа

То, что вы спрашиваете, это немного странно. В любом случае, у вас есть два основных варианта.

  • преобразовать значения вашего словаря в список и нарезать это:
out = pd.concat(list(dfs.values())[::3])

Выход:

   a  b  c
0  x  x  x
0  x  x  x
0  x  x  x
0  x  x  x
  • нарежьте ключи словаря и создайте подсловарь:
out = pd.concat({k: dfs[k] for k in list(dfs)[::3]})

Выход:

        a  b  c
df1  0  x  x  x
df4  0  x  x  x
df7  0  x  x  x
df10 0  x  x  x

Используемый ввод:

dfs = {f'df{i+1}': pd.DataFrame([['x']*3], columns=['a', 'b', 'c']) for i in range(12)}
0
mozway 4 Окт 2022 в 21:50

Если требуется dict, вы можете использовать tuple из dict ключей:

custom_dict = {
    'first': 1,
    'second': 2,
    'third': 3,
    'fourth': 4,
    'fifth': 5,
    'sixth': 6,
    'seventh': 7,
    'eighth': 8,
    'nineth': 9,
    'tenth': 10,
    'eleventh': 11,
    'twelveth': 12,
}
for key in tuple(custom_dict)[::3]:
    print(custom_dict[key])

Затем вы можете вызвать pandas.concat:

df = pd.concat(
    [
        custom_dict[key]
        for key in tuple(custom_dict)[::3]
    ],
    # =========================================================================
    # axis=0 # To Append One DataFrame to Another Vertically
    # =========================================================================
    axis=1 # To Append One DataFrame to Another Horisontally
)

Предполагая, что custom_dict[key] возвращает pandas.DataFrame, а не int, как в моем коде выше.

0
alphamu 4 Окт 2022 в 21:52