繁体   English   中英

Python:如何在数据框中将列拆分为多列并使用动态列命名

[英]Python:how to split column into multiple columns in a dataframe and with dynamic column naming

我有一个示例数据集

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 个值。
  • 如上所述,如何通过重命名将其拆分为多列

我们可以使用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 = 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM