#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Я просмотрел iterrows, понимание списка, понимание словаря, apply и itertuples. Я не могу заставить кого-либо из них выполнить приведенный ниже сценарий. Любая помощь была бы с благодарностью принята!
Пример исходного фрейма данных:
ID |State |Invoice|Price|Email
1000|Texas |1 |2 |texas@test.com
1000|Texas |2 |5 |texas@test.com
1001|Alabama|3 |4 |alabama@test.com
1000|Texas |4 |8 |texas@test.com
1002|Georgia|5 |3 |georgia@test.com
1001|Alabama|6 |6 |alabama@test.com
Ожидаемый результат Выполните итерацию по исходному фрейму данных, извлеките идентификатор, чтобы включить все данные в отдельные фреймы данных.
DF1:
ID |State |Invoice|Price|Email
1000|Texas |1 |2 |texas@test.com
1000|Texas |2 |5 |texas@test.com
1000|Texas |4 |8 |texas@test.com
Df2:
ID |State |Invoice|Price|Email
1001|Alabama|3 |4 |alabama@test.com
1001|Alabama|6 |6 |alabama@test.com
Df3:
ID |State |Invoice|Price|Email
1002|Georgia|5 |3 |georgia@test.com
Комментарии:
1.
for _, i in df.groupby("ID"): print (i)
. Или{n:i for n, i in df.groupby("ID")}
как dict.2. @HenryYik Я использовал «для n, i в df.groupby(«ID»): print (i)» и он взял первый идентификатор и разделил все связанные строки и данные в новый DF. Как я могу заставить его продолжить работу с исходным фреймом данных, чтобы продолжить перенос дополнительных строк в их собственные фреймы данных?
Ответ №1:
Я смог создать словарь, в котором каждый фрейм данных разделен по идентификатору, используя следующий код:
dict_of_dfs = {
ID: group_df
for ID, group_df in df.groupby('ID')
}
Я также смог создать список, в котором каждый фрейм данных разделен по идентификатору, используя следующий код:
list_of_dfs = [
group_df
for _, group_df in df.groupby('ID')
]
Ответ №2:
Используя группировщик из pd.groupby
—
df1, df2, df3 = [i[1] for i in df.groupby(['ID'])]
Используя условия с pd.Series.unique
—
df1, df2, df3 = [df[df['ID']==i] for i in df['ID'].unique()]
Выходные данные для каждого метода —
df1
ID State Invoice Price Email
0 1000 Texas 1 2 texas@test.com
1 1000 Texas 2 5 texas@test.com
3 1000 Texas 4 8 texas@test.com
#df2
ID State Invoice Price Email
2 1001 Alabama 3 4 alabama@test.com
5 1001 Alabama 6 6 alabama@test.com
#df3
ID State Invoice Price Email
4 1002 Georgia 5 3 georgia@test.com