使用 groupby 和合并在 pandas 中创建新列
Use groupby and merge to create new column in pandas
所以我有一个看起来像这样的 pandas 数据框。
name is_something
0 a 0
1 b 1
2 c 0
3 c 1
4 a 1
5 b 0
6 a 1
7 c 0
8 a 1
有没有办法使用 groupby 和 merge 来创建一个新列,该列给出名称在整个数据框中 is_something 值为 1 的出现次数?更新后的数据框如下所示:
name is_something no_of_times_is_something_is_1
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
我知道您可以循环遍历数据框来执行此操作,但我正在寻找一种更有效的方法,因为我正在使用的数据集非常大。提前致谢!
如果 is_something
列中只有 0
和 1
值,则仅使用 sum
和 GroupBy.transform
用于由聚合值填充的新列:
df['new'] = df.groupby('name')['is_something'].transform('sum')
print (df)
name is_something new
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
如果可能,多个值首先通过 1
进行比较,转换为整数,然后使用 transform
与 sum
:
df['new'] = df['is_something'].eq(1).view('i1').groupby(df['name']).transform('sum')
你可以这样做:
df['new'] = df.groupby('name')['is_something'].transform(lambda xs: xs.eq(1).sum())
print(df)
输出
name is_something new
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
或者我们只是映射它
df['New']=df.name.map(df.query('is_something ==1').groupby('name')['is_something'].sum())
df
name is_something New
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
所以我有一个看起来像这样的 pandas 数据框。
name is_something
0 a 0
1 b 1
2 c 0
3 c 1
4 a 1
5 b 0
6 a 1
7 c 0
8 a 1
有没有办法使用 groupby 和 merge 来创建一个新列,该列给出名称在整个数据框中 is_something 值为 1 的出现次数?更新后的数据框如下所示:
name is_something no_of_times_is_something_is_1
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
我知道您可以循环遍历数据框来执行此操作,但我正在寻找一种更有效的方法,因为我正在使用的数据集非常大。提前致谢!
如果 is_something
列中只有 0
和 1
值,则仅使用 sum
和 GroupBy.transform
用于由聚合值填充的新列:
df['new'] = df.groupby('name')['is_something'].transform('sum')
print (df)
name is_something new
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
如果可能,多个值首先通过 1
进行比较,转换为整数,然后使用 transform
与 sum
:
df['new'] = df['is_something'].eq(1).view('i1').groupby(df['name']).transform('sum')
你可以这样做:
df['new'] = df.groupby('name')['is_something'].transform(lambda xs: xs.eq(1).sum())
print(df)
输出
name is_something new
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
或者我们只是映射它
df['New']=df.name.map(df.query('is_something ==1').groupby('name')['is_something'].sum())
df
name is_something New
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3