【问题标题】:How to create (or change) the dimensions of an array/list using numpy or pandas?如何使用 numpy 或 pandas 创建(或更改)数组/列表的维度?
【发布时间】:2020-10-14 06:17:50
【问题描述】:

我正在尝试创建一个 pandas DataFrame 来收集我拥有的所有内容,但是我很难将列表中的 numpy 数组组合成一个数组。

假设我有以下数据:

df0 = pd.DataFrame([[1,2],[2,2],[3,1],[4,4],[5,4]], columns = ['A','B'])

switch = [[1,3,4],[2,5]]

collect = []
for lists in switch:
    mask = df0.A.isin(lists)
    avg = df0[mask].mean().round(2)
    collect.append(avg)
    collect.append((avg[0]**2+avg[1]+2).round(2))

这会产生以下输出:

[A    2.67
 B    2.33
 dtype: float64,
 11.46,
 A    3.5
 B    3.0
 dtype: float64,
 17.25]

但是,我想要以下输出:

 A     B      C
2.67  2.33  11.46
3.5   3.0   17.25

但我无法创建 2x3 矩阵,因为 len(collect) 为 4。我认为我在 for 循环中没有以正确的方式使用 .append。如何创建 len(collect) 为 2 或 6 的数组(或列表)?我在想如果它的长度为 2,我们可以简单地转置 collect,或者它的长度为 6,我们可以重塑它。

【问题讨论】:

    标签: python python-3.x pandas numpy numpy-ndarray


    【解决方案1】:

    其他解决方案在这里

    import pandas as pd
    df0 = pd.DataFrame([[1,2],[2,2],[3,1],[4,4],[5,4]], columns = ['A','B'])
    
    switch = [[1,3,4],[2,5]]
    
    collect = []
    def calc(first,second):
       cal=((first**2+second+2).round(2))
    return cal
    
    for lists in switch:
       mask = df0.A.isin(lists)
       avg = df0[mask].mean().round(2)
       collect.append(avg)
    
    df=pd.DataFrame(collect)
    df['c']='None'
    for i in range(2) : 
       list=[df.apply(lambda row : calc(df.loc[i, "A"], df.loc[i, "B"]),axis=1) ]
       df['c'][i]=list[0][i]
    
    
    print(df)
    

    输出

        A   B   c
    0   2.67    2.33    11.46
    1   3.50    3.00    17.25
    

    【讨论】:

      【解决方案2】:

      我的做法:

      (df0.groupby(pd.Series({x-1:k for k,v in enumerate(switch) for x in v}))
          .mean()
          .assign(C=lambda x: x['A']**2 + x['B']+2)
          .round(2)
      )
      

      输出:

            A     B      C
      0  2.67  2.33  11.44
      1  3.50  3.00  17.25
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 2014-08-10
        • 2022-01-10
        • 1970-01-01
        • 2020-11-06
        • 2015-12-16
        • 2022-01-22
        相关资源
        最近更新 更多