Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/pandas/4.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
Pandas 根据条件将列从一个df复制到另一个df_Pandas_Postgresql - Fatal编程技术网

Pandas 根据条件将列从一个df复制到另一个df

Pandas 根据条件将列从一个df复制到另一个df,pandas,postgresql,Pandas,Postgresql,我有一种情况,在我的数据帧中有3列x,y,point,我正在从另一个df复制id表,但问题是所有列中都有不同的值。我想用point col复制id列,使点1,2,3具有相同的id。 df是 x y点 76.32 42.58 1 86.34 90.02 2 687.12 125.327 1 65.28 87.11 2 963.1 854.2

我有一种情况,在我的数据帧中有3列x,y,point,我正在从另一个df复制id表,但问题是所有列中都有不同的值。我想用point col复制id列,使点1,2,3具有相同的id。 df是

x y点 76.32 42.58 1 86.34 90.02 2 687.12 125.327 1 65.28 87.11 2 963.1 854.2 3 来自df1的id列 M123 第478页 Q145 J768 D476如果每个组都以1开头,则可以通过字典使用,则每个组都以1创建,并与和进行比较:

详情:

如有必要,检查各组之间的差异:

df['id'] = df['point'].diff().lt(0).cumsum().map(dict(enumerate(df1['id'])))
print (df)
        x        y  point   id
0   76.32   42.580      1  111
1   86.34   90.020      2  111
2  687.12  125.327      1  222
3   65.28   87.110      2  222
4  963.10  854.200      3  222
5   85.23   96.230      1  333

print (df['point'].diff().lt(0).cumsum())
0    0
1    0
2    1
3    1
4    1
5    2
Name: point, dtype: int32

使用key cols左连接是合适的解决方案。df['point']=df['id'].eq1.cumsum.astypestr.mul3?@user19-原始数据帧是df,新数据帧是df1,我的答案中有列id。有一些问题?@user19-你能像上面的评论那样更改问题中的数据吗?@user19-我的答案中的解决方案对更改后的数据非常有效well@user19-什么是dictenumeratedf1['id'].head,1?@user19-首先尝试更改.mapdictenumerateAB_U1;+df1['id'].astypestr,1到.mapdictenumerateAB_U1;+df1['id'].astypestr.astypestr,1,如果不工作,请尝试.mapdictenumerateAB_U1;+df1['id'].astype'Int64'。astypestr,1-在0.25中最后一次工作+
print (df['point'].eq(1).cumsum())
0    1
1    1
2    2
3    2
4    2
5    3
Name: point, dtype: int32
df['id'] = df['point'].diff().lt(0).cumsum().map(dict(enumerate(df1['id'])))
print (df)
        x        y  point   id
0   76.32   42.580      1  111
1   86.34   90.020      2  111
2  687.12  125.327      1  222
3   65.28   87.110      2  222
4  963.10  854.200      3  222
5   85.23   96.230      1  333

print (df['point'].diff().lt(0).cumsum())
0    0
1    0
2    1
3    1
4    1
5    2
Name: point, dtype: int32