Python 数据框中的数据操作为每个组添加行

Python 数据框中的数据操作为每个组添加行,python,pandas,data-manipulation,Python,Pandas,Data Manipulation,我想为下面的数据做数据操作。我想在下面为每个经理添加另一行,其中经理和工人是相同的。 我该怎么做 不是:经理的一切对工人来说都是一样的。这只是我的数据集的一个示例场景 多谢各位 data = [['Tom','Aurora',4500,'Shelly','Chicago',43553] ,['Tom','Aurora',4500,'Alex','NewYork',43654] ,['Tom','Aurora',4500,'Kelly','Cincinnati',44674]

我想为下面的数据做数据操作。我想在下面为每个经理添加另一行,其中经理和工人是相同的。 我该怎么做

不是:经理的一切对工人来说都是一样的。这只是我的数据集的一个示例场景 多谢各位

   data = [['Tom','Aurora',4500,'Shelly','Chicago',43553]
    ,['Tom','Aurora',4500,'Alex','NewYork',43654]
    ,['Tom','Aurora',4500,'Kelly','Cincinnati',44674]
    ,['Jason','Charlotte',4567,'Jimmy','Boston',44984]
    ,['Jason','Charlotte',4567,'Aaron','Austin',44583]
   ]

   # Create the pandas DataFrame 
   df = pd.DataFrame(data, columns = ['Manager','Managercity', 
   'manager_id','Worker','WorkerCity','Worker_id']) 

   # print dataframe. 
   print(df) 
下面是所需的数据集

 Manager Managercity  manager_id  Worker  WorkerCity  Worker_id
    Tom      Aurora        4500  Shelly     Chicago      43553
    Tom      Aurora        4500    Alex     NewYork      43654
    Tom      Aurora        4500   Kelly  Cincinnati      44674
    Tom      Aurora        4500     Tom      Aurora       4500
  Jason   Charlotte        4567   Jimmy      Boston      44984
  Jason   Charlotte        4567   Aaron      Austin      44583
  Jason   Charlotte        4567   Jason   Charlotte       4567
谢谢

试试:

def添加(gr):
new_row=gr.iloc[0,:]
新行['Worker']=新行['Manager']
新行['Worker\u id']=新行['manager\u id']
返回gr.append(新行)
df=df.groupby('Manager')。应用(添加)。重置索引(drop=True)
您的示例数据不包含
ManagerCity
,但您也可以使用添加函数中的
new\u row['Worker\u city']=new\u row['Manager\u city']
进行设置。

尝试:

def添加(gr):
new_row=gr.iloc[0,:]
新行['Worker']=新行['Manager']
新行['Worker\u id']=新行['manager\u id']
返回gr.append(新行)
df=df.groupby('Manager')。应用(添加)。重置索引(drop=True)

您的示例数据不包含
ManagerCity
,但您也可以使用添加函数上的
new\u row['Worker\u city']=new\u row['Manager\u city']
对其进行设置。

您可以使用
pd.concat
删除重复项,如下所示:

data = [['Tom','Aurora',4500,'Shelly','Chicago',43553]
    ,['Tom','Aurora',4500,'Alex','NewYork',43654]
    ,['Tom','Aurora',4500,'Kelly','Cincinnati',44674]
    ,['Jason','Charlotte',4567,'Jimmy','Boston',44984]
    ,['Jason','Charlotte',4567,'Aaron','Austin',44583]
   ]

   # Create the pandas DataFrame 
df_in = pd.DataFrame(data, columns = ['Manager','Managercity', 'manager_id','Worker','WorkerCity','Worker_id']) 

df_managers = pd.DataFrame(np.tile(df_in[['Manager','Managercity','manager_id']].drop_duplicates(),2),columns=df_in.columns)
df_out = pd.concat([df_in, df_managers]).sort_values('Manager').reset_index(drop=True)
print(df_out)
输出:

  Manager Managercity manager_id  Worker  WorkerCity Worker_id
0   Jason   Charlotte       4567   Jimmy      Boston     44984
1   Jason   Charlotte       4567   Aaron      Austin     44583
2   Jason   Charlotte       4567   Jason   Charlotte      4567
3     Tom      Aurora       4500  Shelly     Chicago     43553
4     Tom      Aurora       4500    Alex     NewYork     43654
5     Tom      Aurora       4500   Kelly  Cincinnati     44674
6     Tom      Aurora       4500     Tom      Aurora      4500

您可以像这样使用
pd.concat
删除重复项

data = [['Tom','Aurora',4500,'Shelly','Chicago',43553]
    ,['Tom','Aurora',4500,'Alex','NewYork',43654]
    ,['Tom','Aurora',4500,'Kelly','Cincinnati',44674]
    ,['Jason','Charlotte',4567,'Jimmy','Boston',44984]
    ,['Jason','Charlotte',4567,'Aaron','Austin',44583]
   ]

   # Create the pandas DataFrame 
df_in = pd.DataFrame(data, columns = ['Manager','Managercity', 'manager_id','Worker','WorkerCity','Worker_id']) 

df_managers = pd.DataFrame(np.tile(df_in[['Manager','Managercity','manager_id']].drop_duplicates(),2),columns=df_in.columns)
df_out = pd.concat([df_in, df_managers]).sort_values('Manager').reset_index(drop=True)
print(df_out)
输出:

  Manager Managercity manager_id  Worker  WorkerCity Worker_id
0   Jason   Charlotte       4567   Jimmy      Boston     44984
1   Jason   Charlotte       4567   Aaron      Austin     44583
2   Jason   Charlotte       4567   Jason   Charlotte      4567
3     Tom      Aurora       4500  Shelly     Chicago     43553
4     Tom      Aurora       4500    Alex     NewYork     43654
5     Tom      Aurora       4500   Kelly  Cincinnati     44674
6     Tom      Aurora       4500     Tom      Aurora      4500

请编辑数据框创建,因为没有管理器名称==工作者名称..的行。。我甚至不确定是否理解你的问题。要创建第四行吗?如果是,您如何定义worker city,因为我们不知道Tom city…应该添加到worker中,WorkerCity和worker_i您输入的数据框和所需的数据框是相同的?请编辑数据框创建,因为没有manager name==worker name.的行。。我甚至不确定是否理解你的问题。要创建第四行吗?如果是,由于我们不了解Tom city,您如何定义worker city…worker city和worker_I您输入的数据帧和所需的数据帧是相同的?抱歉,我编辑了数据集您的函数给了我一个错误键error:'Manager'@melik您应该在列名上使用大写或小写,否则会让人困惑,考虑到错误,您只需在我的代码中更改名称,如您在数据中定义的工人、经理,这样您就不会收到错误。很高兴我提供了帮助,happy codingSorry man我编辑了数据集你的函数给了我一个错误键error:“Manager”@melik你真的应该在列名上使用大写或小写,否则会很混乱,考虑到这个错误,你应该更改名称,比如
Worker,经理
在我的代码上,因为您在数据中定义了它们,所以您不会收到错误很高兴我提供了帮助,很高兴编码