基于pandas中的3个不同列查找count列

2024-05-29 06:29:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,格式如下:

user_id referral_code referred_by
1        A              None
2        B              A
3        C              B
5        None           None
6        E              B
7        None           none

....

我要做的是为每个用户id创建另一个列权重,这样它将包含他对其他人所做的引用的总数以及他被引用的时间,也就是说,我必须检查用户id的引用代码是否存在于refered\u by列中,并计算相同的频率,如果存在,还添加1refered\u by列有一个用户条目

预期输出为:

user_id referral_code referred_by weights
1        A              None       1
2        B              A          3
3        C              B          1
5        None           None       None
6        E              B          1
7        None           none       none

如果已经尝试过的方法是使用df.grouby以及sizecount,但是没有任何结果


Tags: 数据用户noneidby检查用户格式时间
2条回答

您可以使用weights = df.referred_by.value_counts()['myword']+1,然后将它添加到列权重中的df中

您想构建一个新的条件列。如果条件足够简单,可以使用np.where来实现。我建议你看看这个

这里很复杂,应该有一个np.where的解决方案,但不是很明显。在这种情况下,可以使用apply方法。它为您提供了一个机会,让您可以根据需要编写复杂的条件。使用applynp.where效率低,因为您需要一个python抽象。取决于数据集和条件的复杂性

这里有一个apply的例子:

df = pd.DataFrame(
    [[1, "A" ,   None],
    [2 , "B" ,   "A"],
    [3 , "C" ,   "B"],
    [5 , None,   None],
    [6 , "E"  ,  "B"],
    [7 , None ,  None]],
    columns = 'user_id referral_code referred_by'.split(' ')
)
print(df)
#    user_id referral_code referred_by
# 0        1             A        None
# 1        2             B           A
# 2        3             C           B
# 3        5          None        None
# 4        6             E           B
# 5        7          None        None

weight_refered_by = df.referred_by.value_counts()
print(weight_refered_by)
# B    2
# A    1

def countWeight(row):
    count = 0

    if row['referral_code'] in weight_refered_by.index:
        count = weight_refered_by[row.referral_code]

    if row["referred_by"] != None:
        count += 1

    # If referral_code is none, result is none 
    # because referred_by is included in referral_code
    if row["referral_code"] == None:
        count = None
    return count

df["weights"] = df.apply(countWeight, axis=1)
print(df)
#    user_id referral_code referred_by  weights
# 0        1             A        None      1.0
# 1        2             B           A      3.0
# 2        3             C           B      1.0
# 3        5          None        None      NaN
# 4        6             E           B      1.0
# 5        7          None        None      NaN

希望对你有帮助

相关问题 更多 >

    热门问题