【问题标题】:Combining two columns from two dataframes; same indices but different lengths组合来自两个数据帧的两列;相同的索引但不同的长度
【发布时间】:2013-09-29 00:31:27
【问题描述】:

请注意,我是一名初级程序员,也是一名 python/pandas 用户。我是一名行为科学家,正在学习使用 pandas 来处理和组织我的数据。结果,其中一些可能看起来很明显,并且看起来像是一个不值得讨论的问题。请宽容!对我来说,这是几天的工作,我确实已经花了几个小时试图找出这个问题的答案。提前感谢您的帮助。

我的数据看起来像这样。 “真实”的 Actor 和 Recipient 数据始终是 5 位数字,“Behavior”数据始终是字母代码。我的问题是我也将这种格式用于特殊行,在 Actor 列中用“日期”或“s”等标记表示。这些标记表明“行为”列包含这种特殊类型的数据,而不是实际的行为数据。因此,我想将 Actor 列中的标记替换为 NaN 值,并从行为列中获取特殊数据以放入另一列(在本示例中为空的 Activity 列)。

    follow    Activity    Actor    Behavior    Recipient1
0   1         NaN         date     2.1.3.2012  NaN
1   1         NaN         s        ss.hx       NaN
2   1         NaN         50505    vo          51608
3   1         NaN         51608    vr          50505
4   1         NaN         s        ss.he       NaN

到目前为止,我已经在 pandas 中编写了一些代码来选择“s”行到一个新的数据帧中:

def get_act_line(group):
    return group.ix[(group.Actor == 's')]

result = trimdata.groupby('follow').apply(get_act_line)

我已将此数据框中的 Behavior 列复制到 Activity 列,并将 Actor 和 Behavior 值替换为 NaN:

result.Activity = result.Behavior
result.Behavior = np.nan
result.Actor = np.nan
result.head()

所以我的新数据框如下所示:

follow         follow    Activity    Actor    Behavior    Recipient1
1        2     1         ss.hx       NaN      NaN         NaN
         34    1         hf.xa       NaN      NaN         f.53702
         74    1         hf.fe       NaN      NaN         NaN
10       1287  10        ss.hf       NaN      NaN         db
         1335  10        fe          NaN      NaN         db

我现在想做的是将此数据框与原始数据框合并,替换这些选定行中的所有值,但保留原始数据框中其他行的值。

这似乎是一个简单的问题,但有一个明显的解决方案,或者我一开始就搞错了!

我阅读了 Wes McKinney 的书,阅读了有关不同类型的合并、映射、连接、转换、连接等的文档。我浏览了论坛,但没有找到可以帮助我弄清楚的答案这个出来。您的帮助将不胜感激。

【问题讨论】:

    标签: python merge pandas dataframe


    【解决方案1】:

    您可以做到这一点的一种方法(尽管可能有更优化或更优雅的方法)是:

    mask = (df['Actor']=='s')
    df['Activity'] = df[mask]['Behavior']
    df.ix[mask, 'Behavior'] = np.nan 
    

    其中 df 等同于您的结果数据框。这应该返回(我的列顺序略有不同):

      Activity  Actor             Behavior  Recipient1  follow
    0      NaN   date  2013-04-01 00:00:00          NaN       1
    1    ss.hx    NaN                ss.hx          NaN       1
    2      NaN  50505                   vo        51608       1
    3      NaN  51608                   vr        50505       1
    4    ss.he    NaN                ss.hx          NaN       1
    

    参考资料:

    • 其他 STO 帖子中对 df.ix 的解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多