首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Pandas中现有的两个数据帧中创建一个新的数据框架?

如何从Pandas中现有的两个数据帧中创建一个新的数据框架?
EN

Stack Overflow用户
提问于 2022-03-28 11:32:54
回答 1查看 82关注 0票数 0

我有两个数据帧df_att_transposeddf_1df_1有管理程序和名称列。第二个数据框架,df_att_transposed对所有的名字都有考勤。我的第一个dataframe构造函数df_1是-

代码语言:javascript
复制
{'Sup': {0: 'Sup-1', 1: 'Sup-1', 2: 'Sup-1', 3: 'Sup-1', 4: 'Sup-2',....},'Name': {0: 'Name-1', 1: 'Name-2', 2: 'Name-3'...}}

我的第二个数据帧构造函数df_att_transposed是-

代码语言:javascript
复制
{0: {0: Timestamp('2022-01-31 00:00:00'), 1: Timestamp('2022-02-01 00:00:00'), 2: Timestamp('2022-02-02 00:00:00'),...} 1: {0: 'P', 1: 'P', 2: 'P', 3: 'P', 4: 'P'...}}

在我的新数据框架中,我将添加来自df_att_transposed的相关人员的日期(第0列)和出勤栏。在df_1中,我每次取一行,其中包含for循环每次迭代中的名称和监控器,并将其添加到数据帧中的所有行中。我就是这么做新数据的-

代码语言:javascript
复制
rows = df_1.shape[0]
for i in range(rows):     
    new_df = df_att_transposed.iloc[:,[0,i+1]].copy()
    new_df['Sup'] = df_1.iloc[i]['Sup']
    new_df['Name'] = df_1.iloc[i]['Name']

上面的代码添加了数据,但它只保留了new_df中最后一次迭代中的数据。对于每一次迭代,以前的数据都会被替换。如何在新的数据框架中将来自所有迭代的数据保持在一起?

编辑:(I)输出应该是这样的-

代码语言:javascript
复制
Sup     Name       0       1 
Sup-1   Name-1  28/3/2022  P
Sup-1   Name-1  27/3/2022  P
Sup-1   Name-1  26/3/2022  P
.....
Sup-2   Name-2  28/3/2022  P
Sup-2   Name-2  27/3/2022  P
Sup-2   Name-2  26/3/2022  P
......

我编写的代码从df_1中取一个名称/行,从df_att_transposed中取两列,用new_df写数据。然后在下一次迭代中,从df_1中取出另一行,从df_att_transposed中再取两列,然后覆盖以前存储在new_df中的数据。我希望在每次迭代中追加数据,而不是替换数据。

(ii) df_att_transposed看起来像这样(比如说5名雇员)-

代码语言:javascript
复制
       0     1 2 3 4 5 
0  28/3/2022 P P P P P 
1  27/3/2022 P P P P P 
2  26/3/2022 P P P P P 
....
EN

回答 1

Stack Overflow用户

发布于 2022-03-28 12:42:30

你在找交叉合并吗?

代码语言:javascript
复制
new_df = df_1.merge(df_att_transposed, how='cross')
print(new_df)

# Output
      Sup    Name          0  1
0   Sup-1  Name-1 2022-01-31  P
1   Sup-1  Name-1 2022-02-01  P
2   Sup-1  Name-1 2022-02-02  P
3   Sup-1  Name-2 2022-01-31  P
4   Sup-1  Name-2 2022-02-01  P
5   Sup-1  Name-2 2022-02-02  P
6   Sup-1  Name-3 2022-01-31  P
7   Sup-1  Name-3 2022-02-01  P
8   Sup-1  Name-3 2022-02-02  P
9   Sup-2  Name-4 2022-01-31  P
10  Sup-2  Name-4 2022-02-01  P
11  Sup-2  Name-4 2022-02-02  P
12  Sup-2  Name-5 2022-01-31  P
13  Sup-2  Name-5 2022-02-01  P
14  Sup-2  Name-5 2022-02-02  P

设置

代码语言:javascript
复制
>>> df_1
     Sup    Name
0  Sup-1  Name-1
1  Sup-1  Name-2
2  Sup-1  Name-3
3  Sup-2  Name-4
4  Sup-2  Name-5

>>> df_att_transposed
           0  1
0 2022-01-31  P
1 2022-02-01  P
2 2022-02-02  P
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71646784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档