Я новичок в Pandas, и недавно у меня возникла проблема, которую я не смог решить с помощью MS Excel. У меня есть DataFrame df, например:
Jobtype JobCount Degree
0 BI Analyst 3 Winf
1 BI Analyst 2 Wing
2 BI Analyst 5 Wiwi
3 Marketing 1 Winf
4 Marketing 2 Wing
5 Marketing 6 Wiwi
(Примечание: это немецкие сокращения для степени)
Что я хочу сделать, так это создать новый пустой DataFrame, в котором есть столбцы «JobType» и «Degree» с теми же значениями, НО вместо столбца «JobCount» я хочу, чтобы одна и та же строка была добавлена в раз JobCount новый, пустой DataFrame. Например, я хочу, чтобы новый DataFrame выглядел так:
Jobtype Studiengang
0 BI Analyst Winf
1 BI Analyst Winf
2 BI Analyst Winf
3 BI Analyst Wing
4 BI Analyst Wing
...
Поэтому скопируйте строку JobCount-times в новый DataFrame без столбца JobCount (JobCount-times означает значение для JobCount в этой конкретной строке). На самом деле я решил эту проблему, но это заняло у меня слишком много времени, и я не думаю, что мое решение является правильным, должен быть более простой способ сделать это, и поэтому я прошу помощи, так как я не мог найти правильный решение.
Мой код (который работает, но слишком сложен):
df = pd.read_csv("tete.csv", sep = ";")
cols = ["Jobtype", "Degree"]
new = pd.DataFrame(columns = cols)
df_row_count = range(0, len(df.index))
new_row_count = 0
for i in df_row_count:
job_count = 0
while job_count < df.iloc[i]["JobCount"]:
new.loc[new_row_count] = df.loc[I]
job_count += 1
new_row_count += 1
print(new)
Давайте попробуем repeat
и reindex
:
(df.drop('JobCount', 1)
.reindex(df.index.repeat(df['JobCount']))
.reset_index(drop=True))
Или, если вы хотите что-то немного короче, вы можете повторять:
(df.reindex(df.index.repeat(df.pop('JobCount')))
.reset_index(drop=True))
Jobtype Degree
0 BI Analyst Winf
1 BI Analyst Winf
2 BI Analyst Winf
3 BI Analyst Wing
4 BI Analyst Wing
5 BI Analyst Wiwi
6 BI Analyst Wiwi
7 BI Analyst Wiwi
8 BI Analyst Wiwi
9 BI Analyst Wiwi
10 Marketing Winf
11 Marketing Wing
12 Marketing Wing
13 Marketing Wiwi
14 Marketing Wiwi
15 Marketing Wiwi
16 Marketing Wiwi
17 Marketing Wiwi
18 Marketing Wiwi
@funwide, чего бы это ни стоило, этот ответ работает без необходимости импортировать numpy, и я очень горжусь тем, как это получилось, просто говорю.
Используйте повторение numpy для создания нового фрейма данных с теми же именами столбцов, что и у оригинала, и удалите столбец JobCount.
import numpy as np
newdf = pd.DataFrame(np.repeat(df.values,df.JobCount,axis=0), columns=df.columns).drop(columns=['JobCount'])#Replicate rows as per condition
Jobtype Degree
0 BIAnalyst Winf
1 BIAnalyst Winf
2 BIAnalyst Winf
3 BIAnalyst Wing
4 BIAnalyst Wing
5 BIAnalyst Wiwi
6 BIAnalyst Wiwi
7 BIAnalyst Wiwi
8 BIAnalyst Wiwi
9 BIAnalyst Wiwi
10 Marketing Winf
11 Marketing Wing
12 Marketing Wing
13 Marketing Wiwi
14 Marketing Wiwi
15 Marketing Wiwi
16 Marketing Wiwi
17 Marketing Wiwi
18 Marketing Wiwi
К сожалению, я не знаю библиотеки Numpy, но я посмотрю на нее! Спасибо
Я внимательно рассмотрю эти коды, спасибо!