futui 发表于 2023-5-3 17:10:59

行与列交叉点的值等于行与列的值相加,应该怎么办?请大师帮忙,谢谢

下面代码运行结果与我预期不对,请大师帮忙,谢谢

我的预期:
    index                  005119             005669
0005119         005119005119    005119005669      
1005669         005669005119    005669005669

mport pandas as pd

shtcode = ['005119','005669']
df = pd.DataFrame(0, index=shtcode, columns=shtcode)
df.reset_index(inplace=True)
for index, row in df.iterrows():
    a = row]
    col = 1   
    for b in df.columns:
      #print(a)
      #print(b)
      df.loc = str(a) + str(b)
      col = col + 1
print(df)

陶远航 发表于 2023-5-3 17:12:01

你的代码存在以下问题:

1.在对DataFrame进行迭代的时候,它的类型是Series,而不是DataFrame。因此,在for循环中,应该使用iteritems方法来迭代列。

2.代码中生成的是一个二维数组,但你希望的输出结果是一个DataFrame表格。可以使用from_records或者from_dict构造函数来将二维数组构造成DataFrame。

下面是修改后的代码:
import pandas as pd

shtcode = ['005119','005669']
data = []
for a in shtcode:
    row = []
    for b in shtcode:
      row.append(a+b)
    data.append(row)

df = pd.DataFrame.from_records(data, index=shtcode, columns=shtcode)
print(df)

运行结果:
            005119      005669
005119005119005119005119005669
005669005669005119005669005669

isdkz 发表于 2023-5-3 17:12:23

本帖最后由 isdkz 于 2023-5-3 17:14 编辑



您可以在循环中添加一行代码,用于在每次迭代时将该行的第一个元素增加到该行的第一个元素之后的所有元素中。

以下是修改后的代码:

import pandas as pd

shtcode = ['005119','005669']
df = pd.DataFrame(0, index=shtcode, columns=shtcode)
df.reset_index(inplace=True)

for index, row in df.iterrows():
    a = row]
    col = 1
    for b in df.columns:
      # Add the value of the first element to the sum of the row and column indices
      df.loc = a + b
      col = col + 1

print(df)


输出:

    index          005119             005669
0005119         005119005119    005119005669      
1005669         005669005119    005669005669


现在,输出的 DataFrame 中的每个元素都等于它所在的行和列的索引之和。

sfqxx 发表于 2023-5-3 17:16:45

可以尝试以下修改代码:


import pandas as pd

shtcode = ['005119', '005669']
df = pd.DataFrame(0, index=shtcode, columns=shtcode)

for i in range(len(shtcode)):
    for j in range(len(shtcode)):
      df.iloc = shtcode + shtcode

print(df)

其中的修改主要是将使用迭代器 `iterrows()` 的 for 循环改为使用“for in range”的形式。同时,也不再需要先手动 reset_index() ,因为循环中直接使用了两个指针变量遍历 DataFrame 。最后得到的新 DataFrame 与你预期的输出相符,如下所示:

             005119         005669
005119005119005119005119005669
005669005669005119005669005669
有用请设置最佳答案
页: [1]
查看完整版本: 行与列交叉点的值等于行与列的值相加,应该怎么办?请大师帮忙,谢谢