python - 用两个for循环和python中的条件填充数据框

标签 python pandas dataframe

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

df1:

x    y    Counts
a    b    1
a    c    3
b    c    2
c    d    1

另一个将前两列中的唯一值列表作为索引和列:

df2

   a  b  c  d
a
b
c
d

我想做的是用第一个 DataFrame 的值填充第二个 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

虽然我尝试使用两个带有双 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

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

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

热烈欢迎任何改进我的问题的建议(这是我的第一个问题)。

最佳答案

你可以这样做:

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

输出:

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

关于python - 用两个for循环和python中的条件填充数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41244681/

相关文章:

python - 使用 openpyxl 可以实现更精确的图像放置吗? (像素坐标而不是单元坐标?)

R 库 (openxlsx) 错误 : Workbook has no worksheets

python - 将每年日期更改为每月日期并添加新值以填充每月日期

python - 使用通用的身份验证/注册后端分离 Django 站点

python - 不再支持使用时间戳对整数和整数数组进行加/减。不要使用 `n`来添加/减去 `n * obj.freq`

python - Pandas :在群体内规范化

python - Numpy/pandas 优化 : bins counting

python - 从 pandas DataFrame 导出 LaTeX 表

python - 尝试根据系列四分位数中的相应位置将 pandas df 系列的 float 转换为四个分类值之一

python - 在 Pandas 中对每组进行所有可能的组合