首页 > 解决方案 > 将列表设置为熊猫数据框的子集

问题描述

我希望为行的子集在一列(比如“B”)中设置一个列表列表。假设我的数据框(df)如下所示:

import pandas as pd
import numpy as np
np.random.seed(42)

df = pd.DataFrame({"A": np.random.randn(5)})
idx = df["A"] < 0
mylist = np.random.randint(0, 5, (idx.sum(), 3)).tolist()

df["B"] = None

第一次尝试是这样做,它抛出了一个错误:df.loc[idx, "B"] = mylist. 下一次尝试df.loc[idx, "B"] = pd.Series(mylist)运行但值在错误的位置。我要做的最后一件事是:

df.loc[idx, "B"] = pd.Series(mylist, index=df.index[idx])

我的问题是,这是唯一的方法吗?感觉可能有更简单的方法来达到同样的效果?

标签: pandasdataframe

解决方案


您可以使用at方法,例如

my_list = [np.random.rand(5).tolist() for _ in range(6)]

test_df = pd.DataFrame({'A':np.random.randint(-1,1,6)})
idx = np.where(test_df['A'] < 0)[0]
test_df['B'] = np.random.rand(len(my_list)).astype('object')

for ind in idx:test_df.at[ind,'B'] = my_list[ind]

推荐阅读