Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.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 更新数据帧2会影响作为数据帧2原点的数据帧1_Python_Pandas_Dataframe_Indexing - Fatal编程技术网

Python 更新数据帧2会影响作为数据帧2原点的数据帧1

Python 更新数据帧2会影响作为数据帧2原点的数据帧1,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,我将在其原始数据帧上附加一个反向数据帧。看起来一切都正常,但后来我意识到:df1最初拥有id(1,1,1,2,2)。我将函数df2['id']=df2['id']应用于df2而不是df1,但无论如何,当我将df2附加到df1其ids时,它的ids也发生了变化。这怎么可能?为什么df1采用id列的df2值 import pandas as pd df1 = pd.DataFrame({'x':[1,1,2,9,9], 'y':[1,2,2,100,101],'id':[1,1,1,2,2]}) d

我将在其原始数据帧上附加一个反向数据帧。看起来一切都正常,但后来我意识到:
df1
最初拥有
id
(1,1,1,2,2)。我将函数
df2['id']=df2['id']应用于
df2
而不是
df1
,但无论如何,当我将
df2
附加到
df1
ids
时,它的
ids也发生了变化。这怎么可能?为什么
df1
采用id列的
df2

import pandas as pd
df1 = pd.DataFrame({'x':[1,1,2,9,9], 'y':[1,2,2,100,101],'id':[1,1,1,2,2]})
df2= df1[::-1]   #df2 as reverse of df1
print(df1)
id_amount=df2['id'].nunique()
df2['id'] = df2['id'].apply(lambda x: x + id_amount) 
df2=df2.sort_values(by=['id'])
df1=df1.append(df2)
df1 = df1.reset_index(drop=True)
print(df1)
这里是df1之前和之后:

#before
x   y   id 
1   1    1     
1   2    1     
2   2    1     
9  100   2     
9  101   2     
变成:

#after
x   y     id 
1   1      3     
1   2      3     
2   2      3     
9  100     4     
9  101     4     
2   2      3     
1   2      3     
1   1      3     
9  101     4     
9  100     4
应成为:

x   y     id 
1   1      1     
1   2      1     
2   2      1     
9  100     2     
9  101     2     
2   2      3     
1   2      3     
1   1      3     
9  101     4     
9  100     4  
使用
复制

df2 = df1[::-1].copy() 
使用
复制

df2 = df1[::-1].copy() 

您可以使用
concat
sort\u index
来实现这一点,然后在最后求助

import pandas as pd
df1 = pd.DataFrame({'x':[1,1,2,9,9], 'y':[1,2,2,100,101],'id':[1,1,1,2,2]})

df1 = (pd.concat([df1, df1.assign(id=df1.id+df1.id.max()).sort_index(ascending=False)], ignore_index=True)
           .sort_values('id')
           .reset_index(drop=True))

   x    y  id
0  1    1   1
1  1    2   1
2  2    2   1
3  9  100   2
4  9  101   2
5  2    2   3
6  1    2   3
7  1    1   3
8  9  101   4
9  9  100   4

您可以使用
concat
sort\u index
来实现这一点,然后在最后求助

import pandas as pd
df1 = pd.DataFrame({'x':[1,1,2,9,9], 'y':[1,2,2,100,101],'id':[1,1,1,2,2]})

df1 = (pd.concat([df1, df1.assign(id=df1.id+df1.id.max()).sort_index(ascending=False)], ignore_index=True)
           .sort_values('id')
           .reset_index(drop=True))

   x    y  id
0  1    1   1
1  1    2   1
2  2    2   1
3  9  100   2
4  9  101   2
5  2    2   3
6  1    2   3
7  1    1   3
8  9  101   4
9  9  100   4

那很有效,谢谢。所以,如果我不这样做,它真的仍然与第一个链接?我是唯一一个觉得奇怪的人吗?是的。它链接到第一个,除非你创建了一个它的副本,谢谢。所以,如果我不这样做,它真的仍然与第一个链接?我是唯一一个觉得奇怪的人吗?是的。除非创建其副本,否则它将链接到第一个