首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫将多列相乘以生成新的df

熊猫将多列相乘以生成新的df
EN

Stack Overflow用户
提问于 2018-09-04 05:41:41
回答 2查看 253关注 0票数 1

我从两个数据帧开始-一个填充了星期几的虚拟变量,另一个填充了一天中某小时的虚拟变量(HE - hour and )。

df1 =星期的天数=n x m,其中n是观察次数,m是6:

代码语言:javascript
复制
    Mon Tue Wed Thu Fri Sat
0   1   0   0   0   0   0
1   0   1   0   0   0   0
2   0   0   1   0   0   0
3   0   0   0   1   0   0

df2 =一天中的小时数=n x l,其中n是obs的数量,m是23:

代码语言:javascript
复制
    HE1 HE2 HE3 HE4 HE5 ... HE22 HE23
0   1   0   0   0   0   ... 0    0
1   0   1   0   0   0   ... 0    0
2   0   0   1   0   0   ... 0    0
3   0   0   0   1   0   ... 0    0

我想创建一个维度为n x (m×l)的新df,其中m×l= 6*23 = 138:

代码语言:javascript
复制
    MonHE1 MonHE2 MonHE3 MonHE4 MonHE5 ... SatHE22 SatHE23
0   1      0      0      0      0      ... 0       0
1   0      1      0      0      0      ... 0       0
2   0      0      1      0      0      ... 0       0
3   0      0      0      1      0      ... 0       0

我成功地做到了这一点:

代码语言:javascript
复制
hoursXdays = pd.DataFrame()
Mon = hours.multiply(days['Mon'],axis='index').add_prefix('Mon')
Tue = hours.multiply(days['Tue'],axis='index').add_prefix('Tue')
Wed = hours.multiply(days['Wed'],axis='index').add_prefix('Wed')
Thu = hours.multiply(days['Thu'],axis='index').add_prefix('Thu')
Fri = hours.multiply(days['Fri'],axis='index').add_prefix('Fri')
Sat = hours.multiply(days['Sat'],axis='index').add_prefix('Sat')
hoursXdays = pd.concat([Mon, Tue, Wed, Thu, Fri, Sat],axis=1)

我需要为更多的dfs做这件事,而不仅仅是这几个。如果有什么方法可以推广的话,我将非常感谢你的帮助。

基本上,在pandas中有没有一种方法可以将两个数据帧维度n x m,n x l相乘,从而得到维度n x (m×l)的新df?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-04 06:28:03

您可以在此处仅使用for循环

代码语言:javascript
复制
pd.concat([hours.multiply(days[x],axis='index').add_prefix(x) for x in days.columns],1)
票数 3
EN

Stack Overflow用户

发布于 2018-09-04 06:27:54

您可以使用itertools.productpd.DataFrame默认构造函数

代码语言:javascript
复制
d = {a[0]+b[0]: np.array(a[1])*b[1] for a,b in itertools.product(df.to_dict('list').items(), df2.to_dict('list').items())}

dff = pd.DataFrame(d)

MonHE1  MonHE2  ... SatHE22 SatHE23
0   1   0       ... 0       0
1   0   0       ... 0       0
2   0   0       ... 0       0
3   0   0       ... 0       0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52156445

复制
相关文章

相似问题

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