Вариант A: Итерация по значению из списка фреймов данных
Поскольку у вас есть два фрейма данных, вам придется
- Итерировать по фреймам данных один за другим
- Затем для каждого фрейма данных (
df_tmp
) итерация по всем уникальным числам
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'numbers': [1, 2, 3], 'colors': ['red', 'white', 'blue']})
...: df1 = pd.DataFrame({'numbers': [7, 44, 93], 'colors': ['red', 'white', 'blue']})
In [3]: df_list = [df,df1]
In [4]: for df_tmp in df_list:
...: for num in df_tmp['numbers'].unique():
...: print(num)
...:
1
2
3
7
44
93
Примечание : при таком подходе значения не обязательно будут быть уникальным! (например, если у вас есть 2
в обоих, df['numbers']
и df1['numbers']
, он будет напечатан дважды).
Вариант B: объединение фреймов данных перед повторением
Иногда может быть более полезным создать другой фрейм данных, в котором будут объединены все ваши фреймы данных. Вы можете сделать это с помощью pd.concat 1 вот так:
In [17]: df_new = pd.concat(df_list)
In [18]: df_new
Out[18]:
numbers colors
0 1 red
1 2 white
2 3 blue
0 7 red
1 44 white
2 93 blue
Затем вы можете перебрать все уникальные элементы в 'numbers'
просто:
In [19]: for num in df_new['numbers'].unique():
...: print(num)
...:
1
2
3
7
44
93
- Это гарантирует, что числа уникальны . Обратной стороной является то, что если все, что вам нужно сделать, это перебрать уникальные элементы столбца, который существует в нескольких фреймах данных, создание нового фрейма данных - это немного накладные расходы. Это приводит к опции C.
Опция C: итерация только по уникальным значениям
- Если все, что вы хотите сделать, это перебрать уникальные значения элементов в одном столбце, который существует в нескольких фреймах данных, для этого вам не нужен временный фрейм данных. Вместо этого вы можете добиться того же, просто взяв объединение наборов элементов
# or: nums = set().union(*(map(lambda x:set(x['numbers']), (df, df1))))
In [30]: nums = set().union(*(set(df_['numbers']) for df_ in (df, df1)))
In [31]: nums
Out[31]: {1, 2, 3, 7, 44, 93}
In [32]: for num in nums:
...: print(num)
...:
1
2
3
7
44
93
1 pd.concat()
принимает итерацию (например, , список, кортеж или генератор) в качестве первого аргумента и возвращает новый фрейм данных, который вы можете использовать.