pandas - 将列表设置为熊猫数据框的子集
问题描述
我希望为行的子集在一列(比如“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])
我的问题是,这是唯一的方法吗?感觉可能有更简单的方法来达到同样的效果?
解决方案
您可以使用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]
推荐阅读
- node.js - Angular 4 软件包未安装在 jenkins 中,而安装在 ssh 上使用手动软件包安装工作,而 package.json 无法正常工作
- c - 从文件中读取一串信息并按 int 结果排序
- javascript - 在特定上下文中访问对象时出现问题
- python - 正则表达式重叠包含
- .net-core - 使用 xunit 指定要测试的特定模块
- django - django计算两个时间域之间的持续时间
- c - C中的铸造溢出
- python - 反向传播时深度学习中的问题。(Python)
- c# - .Notation 混淆并将值保存到属性中以备后用。
- c# - 布尔作为方法参数不改变状态