Pandas将列的列表元素的值分布到n个不同的列中

2024-06-26 14:50:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Pandas DataFrame,它包含一个列名RecentDelays,其中包含一个元素列表。 My DataFrame

需要将此RecentDelays列拆分为N个不同的列,如Delay1、Delay2,….第一个值在对应行的Delay1列,第二个值在对应行的Delay2列中,依此类推,如果没有第N个值,则应为NaN


Tags: 元素dataframepandas列表mynan个值delay2
2条回答

对于新列,最好使用DataFrame构造器,因为.apply(pd.Series)速度慢,请检查this timings,最后一个^{}到原始列:

#jedwards data sample
d1 = pd.DataFrame({'Airline':['A','B','C'],'Delays':[[],[1],[1,2]]})

d2 = (pd.DataFrame(d1['Delays'].values.tolist(), index=d1.index)
        .rename(columns = lambda x: 'Delay{}'.format(x+1)))

df = d1.join(d2)
print (df)
  Airline  Delays  Delay1  Delay2
0       A      []     NaN     NaN
1       B     [1]     1.0     NaN
2       C  [1, 2]     1.0     2.0

如果需要删除列,请先使用^{}

^{pr2}$

有一种方法:

import pandas as pd

d1 = pd.DataFrame({'Airline':['A','B','C'],'Delays':[[],[1],[1,2]]})

# Expand column into temporary Dataframe
d2 = d1['Delays'].apply(pd.Series)

# Integrate temp columns back into original Dataframe (while naming column)
for col in d2:
    d1["Delay%d" % (col+1)] = d2[col]

print(d1)

在此之前:

^{pr2}$

之后:

  Airline  Delays  Delay1  Delay2
0       A      []     NaN     NaN
1       B     [1]     1.0     NaN
2       C  [1, 2]     1.0     2.0

您还可以将临时数据框中的列命名为:

# Name columns of new dataframe
d2.columns = ["Delay%d" % (i+1) for i in range(len(d2.columns))]

然后用concat。在

您还可以删除“现已展开的延迟”列,内容如下:

d1.drop(columns=['Delays'], inplace=True) # or,
d1.drop(['Delays'], axis=1, inplace=True)

相关问题 更多 >