基于其他列的值在pandas中创建新列?

2024-05-16 18:39:32 发布

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

Here is the head of my dataframe

df_s['makes'] = df_s['result']
df_s['misses'] = df_s['result']

df_s.loc[(df_s['team'] == 'BOS') & (df_s['shot_distance'] >= 23) &(df_s['result'] == 'made'), 'makes'] = 1
df_s.loc[(df_s['team'] != 'BOS') | (df_s['shot_distance'] < 23) |  (df_s['result'] == 'missed') | (df_s['makes'] == 'made'), 'makes'] = 0
df_s.fillna(0, inplace=True)

df_s.loc[(df_s['team'] == 'BOS') & (df_s['shot_distance'] >= 23) &  (df_s['result'] == 'missed'), 'misses'] = 1
df_s.loc[(df_s['team'] != 'BOS') | (df_s['shot_distance'] < 23) | (df_s['result'] == 'made'), 'misses'] = 0
df_s.fillna(0, inplace=True)

以下是更好的方法,还是更简单的解决方案

>>> df['filter'] = (df['a'] >= 20) & (df['b'] >= 20)

    a   b   c filter
0   1  50   1  False
1  10  60  30  False
2  20  55   1   True
3   3   0   0  False
4  10   0   0  False

Tags: falsetruedfresultlocteamdistancemakes
1条回答
网友
1楼 · 发布于 2024-05-16 18:39:32

更具可读性的方法是创建掩码

mask1 = df_s['team'] == 'BOS'
mask2 = df_s['shot_distance'] >= 23
mask3 = df_s['result'] == 'made'

df_s.loc[(mask1 & mask2 & mask3), 'makes'] = 1
df_s.loc[(~mask1 | ~mask2 | ~mask3), 'makes'] = 0
df_s.fillna(0, inplace=True)

相关问题 更多 >