Python 如果数字在数据帧的行中,请更改数组的值
我有这样一个数据帧:Python 如果数字在数据帧的行中,请更改数组的值,python,arrays,dataframe,Python,Arrays,Dataframe,我有这样一个数据帧: “id”“num” 0 54 [2,2,3,1] 1 55 [2,1,2,2,2] 2 58 [1,2,2,2] 3 552 [1,4,3] 和这样的数组: 01234 0 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 我使用以下
“id”“num”
0 54 [2,2,3,1]
1 55 [2,1,2,2,2]
2 58 [1,2,2,2]
3 552 [1,4,3]
和这样的数组:
01234
0 0 0 0 0 0
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
我使用以下方法创建了数据帧:
df=data.groupby('id')['num'].apply(list).reset_index()
以及具有以下内容的阵列:
df_neu=np.full(数据['id','num']].nunique(),0)
我想更改数据帧的值,使其为“1”,如果数字“2”位于“id”列中“54”的“num”列中,则为“0”
就像这样:
01123
0 1 1 1 0
1 1 1 0 0
2 1 1 0 0
3 1 0 1 1
您可以尝试(类似于我的建议):
结果:
1 2 3 4
54 1 1 1 0
55 1 1 0 0
58 1 1 0 0
552 1 0 1 1
我认为首先转换原始数据帧df
将是一个好主意(性能方面):
这是一个没有转置的版本,可能更好:
df['num'] = df['num'].transform(set) # Not necessary
columns = sorted(set().union(*(num for num in df['num'].values)))
df_neu = pd.DataFrame([[1 if c in df['num'].loc[i] else 0
for c in columns]
for i, key in zip(df.index, df['id'].values)])
df['num'] = df['num'].transform(set)
df['num'] = df['num'].transform(set) # Not necessary
columns = sorted(set().union(*(num for num in df['num'].values)))
df_neu = pd.DataFrame([[1 if c in df['num'].loc[i] else 0
for c in columns]
for i, key in zip(df.index, df['id'].values)])