如何在python中逐位合并数据帧

2024-04-25 16:39:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道我怎样才能做下面的合并? 我有一个更大的数据帧(newauthdf),它由节点和年份(从1990年到2000年)组成。我想计算这些节点的特征向量中心性,条件是一年。所以“克林顿”在1990年和2000年的中心地位将有所不同。我的实现如下,但我不断得到'不能创建具有重复项集的块管理器'。从读取stackoverflow来看,这个错误似乎是由于冗余列造成的。我不希望merge为每年的centrality merge创建新列,而是添加到现有列中。处理这个问题的最佳方法是立即创建完整的特征向量数据帧,然后与newauthdf合并吗?你知道吗

for i, obj in enumerate(nolist):
if i == 0:
    bet = nx.eigenvector_centrality(obj[1])
    sortedeigdf = pd.DataFrame(bet.items(), columns = ['Name', 'EigCentrality']).sort(columns=['Name'], ascending = True)
    sortedeigdf['Year'] = obj[0]
    newdf = pd.merge(newauthdf, sortedeigdf, on= ['Name', 'Year']).reset_index(drop=True)
if i > 0:
    bet = nx.eigenvector_centrality(obj[1])
    sortedeigdf = pd.DataFrame(bet.items(), columns = ['Name', 'EigCentrality']).sort(columns=['Name'], ascending = True)
    sortedeigdf['Year'] = obj[0]
    newdf = pd.merge(newdf, sortedeigdf, on= ['Name', 'Year'], how = 'right').reset_index(drop=True) 

更新:我能通过做我的建议得到我想要的工作。 我只是简单地创建了一个完整的数据框架,首先附加每年的中心,然后合并。它似乎工作得很好。让我知道是否有办法提高我的代码的效率。你知道吗

ceigdf = pd.DataFrame()
for i, obj in enumerate(nolist):
try:
    bet = nx.eigenvector_centrality(obj[1])
    sortedeigdf = pd.DataFrame(bet.items(), columns = ['Name', 'EigCentrality']).sort(columns=['Name'], ascending = True)
    sortedeigdf['Year'] = obj[0]
    ceigdf = ceigdf.append(sortedeigdf)
except:
    sortedeigdf = pd.DataFrame()
    sortedeigdf['EigCentrality'] = np.nan
    sortedeigdf['Year'] = obj[0]
    ceigdf = ceigdf.append(sortedeigdf)

Tags: columns数据nametrueobjdataframemergeyear