从索引列表创建pandas DataFrame列

时间:2020-04-20 23:14:57

标签: python pandas

如果有一个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]之类的东西(这将返回整个Dataframe,但我只想要新DataFrame中的单个值)。

3 个答案:

答案 0 :(得分:3)

使用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])

答案 1 :(得分:2)

使用熊猫的lookup

df.lookup(row_ind,col_ind)
array([1, 3, 4], dtype=int64)

您可以使用pd.DataFrame()

将其作为一列数据帧传回。

答案 2 :(得分:1)

一种简单的方法是像这样使用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)