Pandas 如果数据帧的大小不同,则将第一个数据帧的列指定给第二个数据帧
假设我有两个数据帧:Pandas 如果数据帧的大小不同,则将第一个数据帧的列指定给第二个数据帧,pandas,Pandas,假设我有两个数据帧: df1 = pd.DataFrame(np.arange(0,301),columns = ['id']) df2 = pd.DataFrame(np.arange(200,387),columns = ['id']) df1['2'] = np.random.randint(0,2,301) df2['2'] = np.random.randint(0,2,187) 然后我将id从第二个数据帧匹配到第一个数据帧,并创建第三个df: temp = df2.loc[df2
df1 = pd.DataFrame(np.arange(0,301),columns = ['id'])
df2 = pd.DataFrame(np.arange(200,387),columns = ['id'])
df1['2'] = np.random.randint(0,2,301)
df2['2'] = np.random.randint(0,2,187)
然后我将id从第二个数据帧匹配到第一个数据帧,并创建第三个df:
temp = df2.loc[df2['id'].isin(df1['id'])]
然后我计算一些值:
def values_14(row):
if row['2'] == 1:
return 1
else:
return 0
temp['val'] = temp.apply(lambda row: values_14(row),axis = 1)
我的问题是:如何将数据帧
temp
的val
列中的值分配给第一个数据帧(如果第一个数据帧中的id
与temp
的id
不匹配,则分配NA)到常规中?一般来说,我指的是这样的情况,例如,id
column是名称,它们不像数字那样排序。如何在pandas中执行此操作?首先在df1
中默认使用NA
指定一列。接下来,对于df1
中的每一行,获取行的id
值,并查看id
是否在temp
数据帧中。如果它返回非空,则使用从temp
返回的第一个值为df1
的相应行赋值。您可以尝试以下操作:(np指numpy)
让我问几个问题:1)val_df=temp.loc[temp['id']==row['id']]这一行同时比较(真或假)row['id']和temp['id']的每个值?2) df1.loc[index,'val']=val_df['val'].这里的值[0]您能解释一下为什么我们需要从RHS对值[0]进行编码吗?@Mat_nekras For1)
是的,比较后会有True或False
。对于2)
,val\u df['val']
返回Series
,因此,.values
将其更改为ndarray
和。values[0]
,从数组中拾取第一个元素。可能还有其他的替代方法和有效的方法。只有一个问题出现了:当id值为stings时,代码不起作用。我说,索引应该是整数或切片,而不是字符串
# setting empty nan column for 'val' in df1
df1['val'] = np.nan
# iterate through each row in df1
for index, row in df1.iterrows():
# look for corresponding rows in temp dataframe
# that matches id of current row of df1
val_df = temp.loc[temp['id'] == row['id']]
# if id matched in temp then it will return non-empty
if not val_df.empty:
# assign corresponding row of df1 with first value
# of temp which where id matched
df1.loc[index, 'val'] = val_df['val'].values[0]