[英]Pandas: Convert DataFrame Column Values Into New Dataframe Indices and Columns
[英]convert indices into corresponding pandas dataframe values
我有一个索引矩阵,我想用从对应于给定位置索引的pandas dataframe预定义列中获取的值填充相同的矩阵。
例如,索引矩阵
[[0 1 2]
[1 0 2]
[2 1 3]
[3 4 2]]
pd.DataFrame [“ id”]:
100
200
300
400
500
600
700
800
900
预期结果:
[[100 200 300]
[200 100 300]
[300 100 400]
[400 500 300]]
出现
t_ind = [ td[(td.index.isin(ind[:,0]))]["id"].values,
td[(td.index.isin(ind[:,1]))]["id"].values,
td[(td.index.isin(ind[:,2]))]["id"].values ]
破坏结构并仅返回唯一值,而预期的完整列表
知道如何正确进行转换吗?
注意:数据集非常大,一个接一个的元素是不可接受的,转换应该在一个操作中完成
i_s
是列表的列表。 如果它是一个numpy数组,则效果同样好。
i_s = [[0, 1, 2],
[1, 0, 2],
[2, 1, 3],
[3, 4, 2]]
s = pd.DataFrame([100, 200, 300, 400, 500, 600, 700, 800, 900])
s
不必是DataFrame
。 我这样做是为了与OP的问题保持一致。
pd.DataFrame([[s.iloc[i, 0] for i in i_s[j]] for j in range(len(i_s))])
0 1 2
0 100 200 300
1 200 100 300
2 300 200 400
3 400 500 300
如果将索引数组ndarray
,则可以使用它来索引另一个ndarray
,我们可以使用.values
从Series获得.values
:
>>> ix
array([[0, 1, 2],
[1, 0, 2],
[2, 1, 3],
[3, 4, 2]])
>>> df["id"].values[ix]
array([[100, 200, 300],
[200, 100, 300],
[300, 200, 400],
[400, 500, 300]], dtype=int64)
或者,如果您的ix
是框架,则可以调用replace
:
>>> pd.DataFrame(ix).replace(df["id"])
0 1 2
0 100 200 300
1 200 100 300
2 300 200 400
3 400 500 300
我怀疑纯粹的麻木方法会更快,但这很容易衡量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.