Python连接两个大小不同的数据帧

2024-04-28 11:22:04 发布

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

我试图连接两个不同的数据帧。我将解释我目前所做的一切,以便你了解我所做的努力。我对python有点陌生,如果有任何提示可以改进我的代码,我将不胜感激。在

我有一个数据集看起来很像:

cluster, Type
      1,    M
      1,    T
      1,    M

我对数据进行了分组并进行了一些汇总。除此之外,我还向数据集中添加了一些列。所以我的数据帧现在是这样的:

^{pr2}$

聚合看起来是这样的:

>>> a
cluster  Type, len
      1,    M,   2
      1,    T,   1

我想把everlen从a放到df中的相应列,这样得到的结果是:

>>> df
cluster, Type, M, T
      1,    M, 2, 0
      1,    T, 0, 1

我想做的是:

for idx, row in df.iterrows():
    c = row['cluster']
    t = row['Type']
    val = a.loc[
        (a['cluster'] == c) &
        (a['Type'] == t),
        'len'
    ]
    row[t] = val

最后,它失败了,因为最后一行,行[t]没有得到更新。但我觉得我在用一种非常复杂的方式来做这件事。在

有什么好办法让它更优雅?在


Tags: 数据代码indfforlentypeval
2条回答

这里有一个方法。它仍然涉及到一个循环,但我认为它比你试图做的更清楚和更快。它只使用原始的df,不需要您提供的聚合。在

首先制作一个长度为Type的字典:

len_dict = df.groupby('Type').size().to_dict()
>>> len_dict
{'M': 2, 'T': 1}

然后删除原始df中的重复项,最后循环使用len_dict中的键,并将适当的列分配给相应的键:

^{pr2}$

您可以使用set_indexunstackreset_index从“a”到预期结果:

df = a.set_index([a.Type,'cluster','Type'])['len']\
      .unstack(0).rename_axis(None,axis=1)\
      .reset_index()

输出:

^{pr2}$

相关问题 更多 >