使用DataFrame和numpy生成交叉表(笛卡尔积)

方法一:

import pandas as pd
from pandas import DataFrame

w_df = DataFrame(['w1','w2'],columns=['worker'])

d_df = DataFrame(['0101','0102','0103'],columns=['date'])

new_df = DataFrame(columns=['worker','date'])

for w_index,w_row in w_df.iterrows():
    for d_index,d_row in d_df.iterrows():
        w_data = w_row['worker']
        d_data = d_row['date']

        row =  DataFrame([dict(worker=w_data, date=d_data), ])
        new_df = new_df.append(row,ignore_index=True)

print new_df

#output
   date worker
0  0101     w1
1  0102     w1
2  0103     w1
3  0101     w2
4  0102     w2
5  0103     w2

方法二:

date_list = ['2015-01-01','2015-01-02','2015-01-03']

date_count = len(date_list)

workers = np.arange(15)

df = DataFrame(columns=['w','date'])

for worker in workers:

    cur_arr = np.array([worker] * date_count)
    cur_arr.shape = (date_count,1) #转置

    date_list = np.array(date_list)
    date_list.shape = (date_count,1) #转置

    join_arr = np.hstack((cur_arr,date_list)) #水平方向合并

    df = df.append(DataFrame(join_arr,columns=['w','date']),ignore_index=True)

print df

方法三

import itertools

for x in itertools.product(['w1','w2'],['0101','0102','0103']):
    print x

#output:
('w1','0101')
('w1','0102')
('w1','0103')
('w2','0101')
('w2','0102')
('w2','0103')
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值