python - 回顾数据框中的上一行并选择特定记录

标签 python pandas

我有一个数据框df,看起来像:

           name     year    dept         metric
0   Steve Jones     2018       A    0.703300236
1   Steve Jones     2019       A    0.255587222
2   Jane Smith      2018       A    0.502505934
3   Jane Smith      2019       B    0.698808749
4   Barry Evans     2019       B    0.941325241
5   Tony Edwards    2017       B    0.880940126
6   Tony Edwards    2018       B    0.649086123
7   Tony Edwards    2019       A    0.881365905

我想创建 2 个新的数据框,其中包含某人从部门 A 移动到 B 的记录和另一个人从部门 B 移动到 A 的记录。因此我想要的输出是:

            name        year    dept         metric
0     Jane Smith        2018       A    0.502505934
1     Tony Edwards      2019       B    0.649086123

            name        year    dept         metric
0     Jane Smith        2019       B    0.698808749
1   Tony Edwards        2018       B    0.881365905

某人在旧部门的最后一年的记录被捕获在一个数据框中,而新部门的第一年仅在另一个数据框中捕获。这些记录按名称和年份排序,因此顺序正确。

我已经尝试过:

for row in agg_data.rows:

    df['match'] = np.where(df.dept == 'A' and  df.dept.shift() =='B','1')
    df['match'] = np.where(df.dept == 'B' and  df.dept.shift() =='A','2')

然后将记录选择到数据框中,但我让它工作。

最佳答案

我相信你需要:

df = df[df.groupby('name')['dept'].transform('nunique') > 1]
df = df.drop_duplicates(['name','dept'], keep='last')

df1 = df.drop_duplicates('name')
print (df1)
           name  year dept    metric
2    Jane Smith  2018    A  0.502506
6  Tony Edwards  2018    B  0.649086

df2 = df.drop_duplicates('name', keep='last')
print (df2)
           name  year dept    metric
3    Jane Smith  2019    B  0.698809
7  Tony Edwards  2019    A  0.881366

关于python - 回顾数据框中的上一行并选择特定记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56214582/

相关文章:

python - 如何将具有多个标题行的 csv 文件读入 pandas?

python - 等待后 future 引发 TypeError

python - 如何在不使用制表符的情况下缩进 python 代码块

python - pandas dataframe to_csv 在每行后写入空行

python - 从字典键的子集创建命名元组

python - 为什么退出递归调用时保留一些变量或列表,而另一些则不保留?

python - 如何将 np.int64 转换为 PandasSeries 的 python int64?

python - 如何从 Python 中的 Pandas 数据框创建嵌套的 JSON 文件?

python - 将 Json 转换为 SQL 表

python - 根据其他数据帧 pandas 的值更改一个数据帧的值