Я пытаюсь создать несколько фреймов данных, которые являются подмножествами существующих фреймов данных.
У меня есть df_list
, который на самом деле представляет собой список наборов данных:
df_list = [df1B, df2B, df3B, df4B, df5B, df6B, df7B, df8B, df9B, df10B, df11B, df12B, df13B, df14B, df15B, df16B, df17B, df18B, df19B, df20B, df21B, df22B, df23B, df24B, df25B, df26B, df27B, df28B, df30B, df31B, df32B, df33B, df34B, df35B]
Если я хочу создать подмножество одного набора данных, я делаю это, и это работает:
df2B = df2B.groupby(['Location']).get_group(36)
Он принимает все местоположения с номером 36, но когда я пытаюсь сделать это для всех наборов данных в цикле for, это не работает.
for df in df_list:
df = df.groupby(['Location']).get_group(36)
Но это не для каждого набора данных. Он не показывает никаких сообщений об ошибках, но и ничего не делает :(
Должен ли я просто написать одну и ту же строку 35 раз ??? Надеюсь, у меня есть лучший вариант.
с чем имя или любой другой новый :)
Возможно, вам следует описать, что вы ожидаете от конечного результата.
Конечным результатом должен быть список наборов данных, которые являются подмножеством python df_list
Если я правильно понимаю, вы можете использовать для этого понимание list
:
subset_df_list = [df.groupby('Location').get_group(36) for df in df_list]
Кроме того, ваш цикл for
не работает, потому что вы просто продолжаете присваивать df
. Вы, вероятно, хотите этого, что также эквивалентно приведенному выше пониманию:
subset_df_list = []
for df in df_list:
subset_df = df.groupby('Location').get_group(36)
subset_df_list.append(subset_df)
Большое спасибо! оба варианта сработали для меня, теперь я лучше понимаю концепцию ... Итак, когда я хочу вызвать любое из подмножеств, я просто называю их так? python subset_df_list[i]
@DianaVega Да, это правильно, за исключением того, что ты не вызов, а доступ. Между прочим, блоки кода (с 3 ```) не работают в комментариях.
df = [pd.DataFrame({'Location': np.random.randint(0,5,size=(100))}) for i in range(10)]
df = list(map(lambda x: x.groupby('Location').get_group(1), df))
Вы присваиваете свою переменную цикла, которая затем отбрасывается при следующем обходе. DataFrame.append
не является inplace
и не имеет параметра inplace
. Вместо:
df1 = pd.DataFrame({'gr': [1,1,2,2], 'v': [1,2,3,2]})
df2 = pd.DataFrame({'gr': [1,1,2,2], 'v': [6,5,4,3]})
df_combined = pd.DataFrame({'gr': [], 'v':[]})
df_combined
Empty DataFrame
Columns: [gr, v]
Index: []
for df in [df1, df2]:
df_combined = df_combined.append(df.groupby('gr').get_group(1))
df_combined
# gr v
# 0 1.0 1.0
# 1 1.0 2.0
# 0 1.0 6.0
# 1 1.0 5.0
Если только вам не нужен список DataFrames, что внезапно кажется вам нужным. (Меня бросил df.append()
. Для list
append
добавляется в конец на месте. Для DataFrame это не так. В случае списка вы хотите:
# setup as before
combined_dfs = []
for df in [df1, df2]:
combined_dfs = df_combined.append(df.groupby('gr').get_group(1))
Это забавный способ использования DataFrames, но вот! :D
append
в моем ответе — это list.append
, а не pd.DataFrame.append
, и то, что хочет ОП, — это list
из DataFrames
, а не один единственный DataFrame
.
Я только что понял это и отредактировал прямо перед тем, как ты прокомментировал, @gmds. Извиняюсь!
Вы хотите, чтобы после цикла имя
df1B
указывало на подмножество? Когда вы создаете подмножествоdf1B
, вы хотите иметь возможность ссылаться на это подмножество с именемdf1B
?