Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果数字在数据帧的行中,请更改数组的值_Python_Arrays_Dataframe - Fatal编程技术网

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)])