Pandas: Groupby 中的语法
Pandas: Syntax in Groupby
我有以下数据集:
id window Rank member
1 2 2 0
1 3 2 0
2 3 1 0
2 2 1 0
我想在 window==3 时让 member 等于 Rank。为此,我有以下命令:
df["member"]= df[df['window']==3]['Rank'][0]
但是,我想在按 id 分组的 groupby 语句中执行此操作。 returns 下面的命令出错。这可能是我在这里遗漏的一件简单的事情,但我无法解决上面如何使用 groupby 的问题 command.Any 非常感谢帮助。
df["member"]= df.groupby("id")[df[df['window']==3]['Rank'][0]]
您可以使用 numpy.where
or DataFrame.loc
:
df['member'] = np.where(df['window']==3, df['Rank'], df['member'])
print (df)
id window Rank member
0 1 2 2 0
1 1 3 2 2
2 2 3 1 1
3 2 2 1 0
df.loc[df['window']==3, 'member'] = df['Rank']
print (df)
id window Rank member
0 1 2 2 0
1 1 3 2 2
2 2 3 1 1
3 2 2 1 0
您可以使用 pandas.DataFrame.where
-
来实现
df = pd.DataFrame({'id':[1,1,2,2],'window':[2,3,3,2],'Rank':[2,2,1,1],'member':[0,0,0,0]})
=>
Rank id member window
0 2 1 0 2
1 2 1 0 3
2 1 2 0 3
3 1 2 0 2
df['member'] = df['Rank'].where(df['window']==3, df['member'])
print(df)
=>
Rank id member window
0 2 1 0 2
1 2 1 2 3
2 1 2 1 3
3 1 2 0 2
我有以下数据集:
id window Rank member
1 2 2 0
1 3 2 0
2 3 1 0
2 2 1 0
我想在 window==3 时让 member 等于 Rank。为此,我有以下命令:
df["member"]= df[df['window']==3]['Rank'][0]
但是,我想在按 id 分组的 groupby 语句中执行此操作。 returns 下面的命令出错。这可能是我在这里遗漏的一件简单的事情,但我无法解决上面如何使用 groupby 的问题 command.Any 非常感谢帮助。
df["member"]= df.groupby("id")[df[df['window']==3]['Rank'][0]]
您可以使用 numpy.where
or DataFrame.loc
:
df['member'] = np.where(df['window']==3, df['Rank'], df['member'])
print (df)
id window Rank member
0 1 2 2 0
1 1 3 2 2
2 2 3 1 1
3 2 2 1 0
df.loc[df['window']==3, 'member'] = df['Rank']
print (df)
id window Rank member
0 1 2 2 0
1 1 3 2 2
2 2 3 1 1
3 2 2 1 0
您可以使用 pandas.DataFrame.where
-
df = pd.DataFrame({'id':[1,1,2,2],'window':[2,3,3,2],'Rank':[2,2,1,1],'member':[0,0,0,0]})
=>
Rank id member window
0 2 1 0 2
1 2 1 0 3
2 1 2 0 3
3 1 2 0 2
df['member'] = df['Rank'].where(df['window']==3, df['member'])
print(df)
=>
Rank id member window
0 2 1 0 2
1 2 1 2 3
2 1 2 1 3
3 1 2 0 2