2017-12-18 60 views
-4

创建数据帧我有表像下面 (在这个例子中,它代表的名单,但这不需要是给出列表)如何在python

age=[3,4,5,6] 

sex=[1,2] 

limit=[3,4] 

我想创建数据帧,其有各种组合。

但“限制”列超过“年龄”列。

所以我期望的结果是这样的。

age sex limit 
3 1 3 
3 1 4 
4 1 4 
3 2 3 
3 2 4 
4 2 4 

我该如何得到这个结果?

+0

OK,你尝试过这么远吗? –

+0

你可以用一些编程来得到这个结果。你有没有尝试过? – Julien

+0

提示:用于... for .. if ..等向我们展示你的尝试。 – rnso

回答

1

此解决方案使用Numpy和Pandas使用'limit'大于或等于'age'的约束创建组合的数据框。请注意,您的帖子中写道:“大于”,但你的输出的例子显示了“大于或等于”:

import itertools 
age=[3,4,5,6] 
sex=[1,2] 
limit=[3,4] 
a = [age, sex, limit] 
mylist = list(itertools.product(*a)) 

import pandas as pd 
import numpy as np 
df = pd.DataFrame(np.array(mylist).reshape(len(mylist),3), columns = ["age","sex","limit"]) 

df2 = df[df['limit'] >= df['age']] 
print df2.to_string(index=False) 

输出是:

age sex limit 
    3 1  3 
    3 1  4 
    3 2  3 
    3 2  4 
    4 1  4 
    4 2  4   
0

基本数据:

age=[3,4,5,6] 
sex=[1,2] 
limit=[3,4] 

使用列表理解结合forif的下列代码检查每个组合:

lst = [(a, s, l) 
     for a in age 
     for l in limit 
     if l >= a 
     for s in sex] 
df = pd.DataFrame(data=lst, columns=["age","sex","limit"]) 
print(df) 

输出:

age sex limit 
0 3 1  3 
1 3 1  4 
2 3 2  3 
3 3 2  4 
4 4 1  4 
5 4 2  4