Python 将数据帧的每一行重复N次以创建新的数据帧(N由另一列定义)
说到熊猫,我是一个初学者,最近我遇到了一个用MS Excel无法解决的问题。我有一个数据帧df,如:Python 将数据帧的每一行重复N次以创建新的数据帧(N由另一列定义),python,pandas,dataframe,Python,Pandas,Dataframe,说到熊猫,我是一个初学者,最近我遇到了一个用MS Excel无法解决的问题。我有一个数据帧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 (旁注:这些是
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
(旁注:这些是学位的德语缩写)
我要做的是创建一个新的空数据框,其中的“JobType”和“Degree”列具有相同的值,但不是“JobCount”列,而是将相同的行添加到新的空数据框中。例如,我希望有一个新的数据帧,如下所示:
Jobtype Studiengang
0 BI Analyst Winf
1 BI Analyst Winf
2 BI Analyst Winf
3 BI Analyst Wing
4 BI Analyst Wing
...
因此,将一行JobCount times复制到新的数据帧中,而不在其中包含JobCount列(JobCount times表示该特定行中的JobCount值)。我确实解决了这个问题,但我花了太长时间,我不认为我的解决方案是正确的,必须有一个更简单的方法来解决,因此我请求帮助,因为我找不到合适的解决方案
我的代码(有效但太复杂了):
df=pd.read_csv(“tete.csv”,sep=“;”)
cols=[“工作类型”,“学位”]
new=pd.DataFrame(columns=cols)
df_row_count=范围(0,len(df.index))
新行计数=0
对于df_行中的i_计数:
作业计数=0
当作业计数
让我们尝试重复和重新索引:
(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))
使用numpy repeat创建与原始列名称相同的新datframe,并删除列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图书馆,但我会调查它!谢谢,我会仔细看看这些代码,谢谢@有趣的是,这个答案不需要输入numpy就可以实现,我为它的结果感到骄傲,只是说。
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
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