我有这样一个 Dataframe :
| 姓名|食物|体育|
| - ------|- ------|- ------|
| 汤姆|海鲜饭|网球,篮球|
| 尼克|鸡|篮球|
| 东尼|鸡|足球|
| 玛丽亚|鸡|篮球|
我想创建一个新列(包含当前列值的列表),如下所示:
| 姓名|食物|体育|列表列|
| - ------|- ------|- ------|- ------|
| 汤姆|海鲜饭|网球,篮球|[汤姆,海鲜饭,网球,篮球]|
| 尼克|鸡|篮球|[尼克,鸡,篮球]|
| 东尼|鸡|足球|[托尼,鸡,足球]|
| 玛丽亚|鸡|篮球|[玛丽亚,鸡,篮球]|
这是我目前计算/添加新列的方式:
data = {'Name':['Tom', 'nick', 'krish', 'jack'],
'Food':['Paella', 'Chicken', 'Chicken', 'Chicken'],
'Sport':['Tennis, Basketball','Basketball','Football','Tennis']}
df = pd.DataFrame(data)
def df_prepare(data):
return (data.fillna('0')
.rename(columns={'Sport': 'Courses'})
.assign(listcolumn = lambda df:df['Name'].str.split(",") +
df['Food'].str.split(",") +
df['Courses'].str.split(",")))
dataframe_done = df_prepare(df)
有没有一种替代方法可以更快地创建新列?这只是一个示例 Dataframe 。真实的的 Dataframe 有数千行
4条答案
按热度按时间gdx19jrr1#
使用理解:
如果列数较少,则只需:
ecbunoof2#
为了提高性能,请将值转换为numpy数组,并将列表解析与
join
和split
一起使用:ecfdbz9o3#
另一种可能的解决方案:
输出:
mspsb9vt4#
您可以使用apply方法和pd.Series来创建新列。下面是如何执行此操作的示例:
此lambda函数根据Name、Food和Sport列中的值创建一个新列表,apply将lambda函数应用于 Dataframe 的每一行,创建一个新系列,然后将其分配给 Dataframe 中的新列。