Как создать несколько фреймов данных, используя цикл for в Python - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь создать несколько фреймов данных, которые являются подмножествами существующих фреймов данных.

У меня есть 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 раз ??? Я надеюсь, у меня есть лучший вариант.

Ответы [ 3 ]

1 голос
/ 29 мая 2019

Если я правильно понимаю, вы можете использовать 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)
0 голосов
/ 29 мая 2019

Вы присваиваете переменную цикла, которая затем выбрасывается при следующем цикле. 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

0 голосов
/ 29 мая 2019
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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...