Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧的每一行重复N次以创建新的数据帧(N由另一列定义)_Python_Pandas_Dataframe - Fatal编程技术网

Python 将数据帧的每一行重复N次以创建新的数据帧(N由另一列定义)

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 (旁注:这些是

说到熊猫,我是一个初学者,最近我遇到了一个用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”和“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