请注意,我是一名初级程序员,也是一名 python/pandas 用户。我是一名行为科学家,正在学习使用 pandas 来处理和组织我的数据。结果,其中一些可能看起来很明显,并且看起来像是一个不值得讨论的问题。请宽容!对我来说,这是几天的工作,我确实已经花了几个小时试图找出这个问题的答案。提前感谢您的帮助。
我的数据看起来像这样。“真实”的 Actor 和 Recipient 数据始终是 5 位数字,而“Behavior”数据始终是字母代码。我的问题是我也将这种格式用于特殊行,在 Actor 列中用“日期”或“s”等标记表示。这些标记表明“行为”列包含这种特殊类型的数据,而不是实际的行为数据。所以,我想用 NaN 值替换 Actor 列中的标记,并从行为列中获取特殊数据以放入另一列(在本例中为空的 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 的书,阅读了有关不同类型的合并、映射、连接、转换、连接等的文档。我浏览了论坛,但没有找到可以帮助我解决这个问题的答案。您的帮助将不胜感激。