python - 在 pandas 中查找重复项并按日期使用非 Nan 值修改它们

标签 python pandas dataframe

我有一个数据框,我想根据颜色和价格查找重复项。然后使用最新(基于日期)行的代码更改代码,该行在“详细信息”列中没有 Nan 值。我不想删除任何行。数据框是这样的:

id   Color   Price   Code       Date          Detail
1   White    1.50     111   3-22-2017 12:00    aa
2   Green    2.20     222   3-23-2017 09:55    bb
3   Black    3.00     333   3-24-2017 11:45    cc
4   White    1.50     111   3-23-2017 10:20    Nan
5   White    1.50     444   3-23-2017 08:15    ee
6   Green    2.20     555   3-25-2017 07:05    ff

结果应该是这样的:

id   Color   Price   Code       Date           Detail
 1   White    1.50    *444*   3-22-2017 12:00   aa
 2   Green    2.20    *555*   3-23-2017 09:55   bb
 3   Black    3.00     333    3-24-2017 11:45   cc
 4   White    1.50    *444*   3-23-2017 10:20   Nan
 5   White    1.50     444    3-23-2017 08:15   ee
 6   Green    2.20     555    3-25-2017 07:05   ff

这段代码只完成了一半的工作,它没有考虑详细信息列。那么,我应该改变什么?也许使用 notnull() ?

df['Date'] = pd.to_datetime(df['Date'])
df['Code'] = df.sort_values('Date').groupby(['Color', 'Price'])['Code'].transform('last')

最佳答案

您需要使用 GroupBy.apply 的自定义函数,因为GroupBy.transform无法同时处理 2 列。

df['Date'] = pd.to_datetime(df['Date'])

def f(x):
    a = x.loc[x['Detail'].notnull(), 'Code']
    #added if-else because no match return error in iat (iloc) functions 
    x['Code'] = np.nan if a.empty else a.iat[-1]
    return x

df = df.sort_values('Date').groupby(['Color', 'Price'], sort=False).apply(f).sort_index()
print (df)
   id  Color  Price  Code                Date Detail
0   1  White    1.5   444 2017-03-22 12:00:00     aa
1   2  Green    2.2   555 2017-03-23 09:55:00     bb
2   3  Black    3.0   333 2017-03-24 11:45:00     cc
3   4  White    1.5   444 2017-03-23 10:20:00    NaN
4   5  White    1.5   444 2017-03-23 08:15:00     ee
5   6  Green    2.2   555 2017-03-25 07:05:00     ff

关于python - 在 pandas 中查找重复项并按日期使用非 Nan 值修改它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46337893/

相关文章:

python - (list|set|dict) 包含 yield 表达式的理解不返回 (list|set|dict)

python - 按列值对数据帧进行索引

python - Python中的频繁模式挖掘

python - 如何从 Pandas 数据框中的列中删除字符串值

python - pandas DataFrame 从 DateTimeIndex 中选择行列表 - KeyError。理解为什么

python - 用 Pandas 替换另一个数据框中数据框中的值

python - 如何开发一个django->pylons文件上传工具?

python - 在 Flask 中运行 Python 并持续执行后台任务

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

python - 使用参数列表删除行 Pandas