Chr*_*s C 3 python apply dataframe pandas
我是熊猫的新手.我有一个像这样的Pandas数据框:
df = pd.DataFrame(data={'id': [1, 1, 1, 2, 2, 2, 2], 'val1': [0, 1, 0, 0, 1, 0, 0]})
Run Code Online (Sandbox Code Playgroud)
我想添加一个列val2
,指示一行是否落在另一行与其id
自身相同的行之下val1 == 1
.
结果将是一个数据框,如:
df = pd.DataFrame(data={'id': [1, 1, 1, 2, 2, 2, 2], 'val1': [0, 1, 0, 0, 1, 0, 0], 'val2': [0, 0, 1, 0, 0, 1, 1]})
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是使用apply语句,但这些只是按行进行.从我的循环经验来看,永远不是答案.任何帮助将不胜感激!
让我们在里面尝试shift
+ .cumsum
groupby
df['val2'] = df.groupby('id').val1.apply(
lambda x: x.shift().cumsum()
).ge(1).astype(int)
Run Code Online (Sandbox Code Playgroud)
或者,为了避免这种情况lambda
,
df['val2'] = (
df.groupby('id')
.val1.shift()
.groupby(df.id)
.cumsum()
.ge(1)
.astype(int)
)
Run Code Online (Sandbox Code Playgroud)
df
id val1 val2
0 1 0 0
1 1 1 0
2 1 0 1
3 2 0 0
4 2 1 0
5 2 0 1
6 2 0 1
Run Code Online (Sandbox Code Playgroud)