我有字典:
import Button from 'Button.vue'
import Vue from 'vue'
var ComponentClass = Vue.extend(Button)
var instance = new ComponentClass({
propsData: { type: 'primary' }
})
instance.$slots.default = [ 'Click me!' ]
instance.$mount() // pass nothing
this.$refs.container.appendChild(instance.$el)
和一个列表:
d = {'A-A': 1, 'A-B':2, 'A-C':3, 'B-A':5, 'B-B':1, 'B-C':5, 'C-A':3,
'C-B':4, 'C-C': 9}
我有一个DataFrame:
L = [A,B,C]
我想根据字典键用字典中的值填充df中的每一行。例如:
df =pd.DataFrame(columns = L, index=L)
我尝试通过以下方式这样做:
A B C
A 1 2 3
B 5 1 5
C 3 4 9
还有另一种方法可以做到这一点,尤其是在有大量数据的情况下?
谢谢您的帮助
答案 0 :(得分:1)
这是我可以想到的另一种方式:
import numpy as np
import pandas as pd
# given
d = {'A-A': 1, 'A-B':2, 'A-C':3, 'B-A':5, 'B-B':1, 'B-C':5, 'C-A':3,
'C-B':4, 'C-C': 9}
L = ['A', 'B', 'C']
# copy the key values into a numpy array
z = np.asarray(list(d.values()))
# reshape the array according to your DataFrame
z_new = np.reshape(z, (3, 3))
# copy it into your DataFrame
df = pd.DataFrame(z_new, columns = L, index=L)
答案 1 :(得分:0)
这应该可以解决问题,尽管这可能不是最佳方式:
for index in L:
prefix = index + "-"
df.loc[index] = [d.get(prefix + column, 0) for column in L]
对于小列表,事先单独计算prefix
可能会慢一些,对于大列表,可能会更快。
for index in L:
这会遍历所有行名。
prefix = index + "-"
每行的所有键都以index + "-"
开头,例如"A-"
,"B-"
…等。
df.loc[index] =
设置整个行的内容。
[ for column in L]
与逗号([1, 2, 3]
)相同,只是用于任意数量的项目。这称为“列表理解”。
d.get( , 0)
这与d[ ]
相同,但是如果找不到任何内容,则返回0
。
prefix + column
将列结尾处,例如"A-"
给出"A-A"
,"A-B"
…