为了账号安全,请及时绑定邮箱和手机立即绑定

从索引列表创建 pandas DataFrame 列

从索引列表创建 pandas DataFrame 列

手掌心 2022-10-18 15:10:17
如果有一个 DataFrame 并且我有一个行和列索引列表。我想从索引列表指向的 DataFrame 值中创建一列。df=pd.DataFrame([[0,1,0],[3,0,0],[4,0,1]])row_ind=[0,1,2]col_ind=[1,0,0]所以在这种情况下,我想获得一个新的 DataFrame,它包含值 1、3、4。我可以通过循环来做到这一点zip(row_ind, col_ind),然后在每次迭代中访问一个 DataFrame 单元并将其添加到我的新数据中。有没有更好的选择,单线?类似的东西df.iloc[row_ind,col_ind](这会返回整个数据帧,但我只想要新数据帧中的单个值)。
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

使用熊猫的查找:


df.lookup(row_ind,col_ind)

array([1, 3, 4], dtype=int64)

您可以将其作为单列数据框传回...使用pd.DataFrame()


查看完整回答
反对 回复 2022-10-18
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

使用numpy的精美索引:


import pandas as pd


df = pd.DataFrame([[0, 1, 0], [3, 0, 0], [4, 0, 1]])

row_ind = [0, 1, 2]

col_ind = [1, 0, 0]


series = pd.Series(df.to_numpy()[row_ind, col_ind])


查看完整回答
反对 回复 2022-10-18
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

一个简单的方法是这样使用df.values:


import pandas as pd


df = pd.DataFrame([[0, 1, 0], [3, 0, 0], [4, 0, 1]])

row_ind = [0, 1, 2]

col_ind = [1, 0, 0]


result = [df.values[row_ind[i], col_ind[i]] for i in range(len(row_ind))]


print(result)

返回


[1, 3, 4]

如果你真的想要它在另一个数据框中,只需添加


df2 = pd.DataFrame(result)


查看完整回答
反对 回复 2022-10-18
  • 3 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信