用python填充两个for循环和if条件的数据帧

Nel*_*lyM 4 python dataframe pandas

我有两个DataFrame,一个看起来像这样:

DF1:

x    y    Counts
a    b    1
a    c    3
b    c    2
c    d    1
Run Code Online (Sandbox Code Playgroud)

另一个在前两列中包含唯一值列表作为索引和列:

DF2

   a  b  c  d
a
b
c
d
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用第一个DataTrame中的值填充第二个DataFrame,因为列和索引的交集是来自第一个DataFrame的相同行,例如:

   a    b   c   d
a   0   1   3   0
b   1   0   2   0
c   3   2   0   1
d   0   0   1   0
Run Code Online (Sandbox Code Playgroud)

虽然我尝试使用两个具有双if条件的for循环,但它会使计算机块(假设一个真正的DataFrame包含超过1000行).

我试图实现的那段代码(并且使得计算显然对于计算机来说太重'):

for i in df2.index:
    for j in df2.columns:
        if (i==df1.x.any() and j==df1.y.any()):
            df2.loc[i,j]=df1.Counts
Run Code Online (Sandbox Code Playgroud)

需要注意的是,唯一值列表(即第二个DataFrame中的索引和列)比第一列中的行数长,在我的示例中它们重合.

如果它具有任何相关性,则第一个数据帧基本上表示第一列和第二列中的单词的组合以及它们在文本中的出现.出现次数基本上是边的权重.所以,我正在尝试创建一个矩阵,以便通过igraph绘制图形.我选择首先创建一个DataFrame,然后将其值作为数组传递给igraph.据我所知,python-igraph不能使用数据框来绘制图形,只是一个numpy数组.尝试了类似问题的一些建议,到目前为止没有任何成果.

任何改善我的问题的建议都受到热烈欢迎(这是我的第一个问题).

MYG*_*YGz 5

你可以这样做:

import pandas as pd

#df = pd.read_clipboard()
#df2 = df.copy()
df3=df2.pivot(index='x',columns='y',values='Counts')
print df3
print
new=sorted((set(df3.columns.tolist()+df3.index.tolist())))
df3 = df3.reindex(new,columns=new).fillna(0).applymap(int)
print df3
Run Code Online (Sandbox Code Playgroud)

输出:

y    b    c    d
x               
a  1.0  3.0  NaN
b  NaN  2.0  NaN
c  NaN  NaN  1.0

y  a  b  c  d
x            
a  0  1  3  0
b  0  0  2  0
c  0  0  0  1
d  0  0  0  0
Run Code Online (Sandbox Code Playgroud)