gpt4 book ai didi

pandas - 仅保留重复列的第一个值(将 0 设置为其他值)

转载 作者:行者123 更新时间:2023-12-04 15:11:47 25 4
gpt4 key购买 nike

假设我有以下情况:

第一列 ['ID'] 最终将具有重复值的数据框。

import pandas as pd
df = pd.DataFrame({"ID": [1,2,3,4,4,5,5,5,6,6],
"l_1": [10,12,32,45,45,20,20,20,20,20],
"l_2": [11,12,32,11,21,27,38,12,9,6],
"l_3": [5,9,32,12,21,21,18,12,8,1],
"l_4": [6,21,12,77,77,2,2,2,8,8]})


ID l_1 l_2 l_3 l_4
1 10 11 5 6
2 12 12 9 21
3 32 32 32 12
4 45 11 12 77
4 45 21 21 77
5 20 27 21 2
5 20 38 18 2
5 20 12 12 2
6 20 9 8 8
6 20 6 1 8

出现重复ID时:

  • 我只需要保留列 l_1l_4 的第一个值(其他重复的行必须为零)。
  • 列“l_2”和“l_3”必须保持不变。
  • 当 ID 重复时,l_1 和 l_4 列的这些行上的值也将重复。

预期输出:

ID  l_1 l_2 l_3 l_4
1 10 11 5 6
2 12 12 9 21
3 32 32 32 12
4 45 11 12 77
4 0 21 21 0
5 20 27 21 2
5 0 38 18 0
5 0 12 12 0
6 20 9 8 8
6 0 6 1 0

是否有使用 pandas 或 numpy 的直接方法来完成此操作?

我可以完成所有这些步骤:

x1 = df[df.duplicated(subset=['ID'], keep=False)].copy()

x1.loc[x1.groupby('ID')['l_1'].apply(lambda x: (x.shift(1) == x)), 'l_1'] = 0

x1.loc[x1.groupby('ID')['l_4'].apply(lambda x: (x.shift(1) == x)), 'l_4'] = 0

df = df.drop_duplicates(subset=['ID'], keep=False)

df = pd.concat([df, x1])

最佳答案

这不就是:

df.loc[df.duplicated('ID'), ['l_1','l_4']] = 0

输出:

   ID  l_1  l_2  l_3  l_4
0 1 10 11 5 6
1 2 12 12 9 21
2 3 32 32 32 12
3 4 45 11 12 77
4 4 0 21 21 0
5 5 20 27 21 2
6 5 0 38 18 0
7 5 0 12 12 0
8 6 20 9 8 8
9 6 0 6 1 0

关于pandas - 仅保留重复列的第一个值(将 0 设置为其他值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65093872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com