【问题标题】:How to create dataframe in python如何在python中创建数据框
【发布时间】:2018-05-31 08:19:03
【问题描述】:

我有如下列表 (在这个例子中,它表示为列表,但这不需要作为列表给出)

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

我怎样才能得到这个结果?

【问题讨论】:

  • 好的,到目前为止你尝试了什么?
  • 你可以通过一些编程得到这个结果。你试过了吗?
  • 提示:使用 for ... for .. if .. 等。在这里向我们展示您的尝试。

标签: python pandas


【解决方案1】:

基本数据:

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

【讨论】:

    【解决方案2】:

    此解决方案使用 Numpy 和 Pandas 创建一个组合数据框,使用“限制”大于或等于“年龄”的约束。请注意,您的帖子说“大于”,但您的输出示例显示“大于或等于”。:

    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         
    

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多