【问题标题】:Python:how to split column into multiple columns in a dataframe and with dynamic column namingPython:如何在数据框中将列拆分为多列并使用动态列命名
【发布时间】:2020-09-24 07:07:42
【问题描述】:

我有一个样本数据集

id           value
[10,10]     ["apple","orange"]  
[15,67]      ["banana","orange"] 
[12,34,45]   ["apple","banana","orange"] 

我想把它转换成

id1 id2 id3            value1 value2 value3
10  10  nan           apple  orange   nan
15  67  nan           banana orange   nan
10  10  45            apple  banana  orange
  • 我之前使用 if else 条件解决了这个问题
  • 但数据可能是动态的,因此它可能有 3 个以上的值。
  • 如前所述如何通过重命名拆分为多列

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    我们可以使用tolistpd.DataFrame 重建您的数据。然后concat一切又在一起了:

    d = [pd.DataFrame(df[col].tolist()).add_prefix(col) for col in df.columns]
    df = pd.concat(d, axis=1)
    
       id0  id1   id2  value0  value1  value2
    0   10   10   NaN   apple  orange    None
    1   15   67   NaN  banana  orange    None
    2   12   34  45.0   apple  banana  orange
    

    【讨论】:

    • 你能解释一下你的代码 df[col].tolist()).add_prefix(col)
    • tolist 将您的熊猫系列(列)转换为 Python 列表:[[10, 10], [15, 67], [12, 34, 45]]add_prefix 为您的列名添加前缀,因为这些现在是 0, 1, 2 .. n。尝试运行每个部分,您会看到它;非常简单
    【解决方案2】:

    试试这个代码。

    df = pd.DataFrame({"id":[[10, 10], [15, 67], [12, 34, 45]],
                       "value":[['a', 'o'], ['b', 'o'], ['a', 'b', 'o']]})
        
    output = pd.DataFrame()
    for col in df.columns:
        output = pd.concat([output,
                           pd.DataFrame(df[col].tolist(), columns = [col + str(i+1) for i in range(df[col].apply(len).max())])],
                            axis = 1)
    

    键码是pd.DataFrame(df[col].tolist(), columns = [col + str(i+1) for i in range(df[col].apply(len).max())])]

    这里,df[col].apply(len).max() 是列中列表中元素的最大数量。 df[col].tolist()df[col] 转换为嵌套列表,并将其重新制作为DataFrame。

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2020-09-14
      相关资源
      最近更新 更多