Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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_Pandas_Dataframe - Fatal编程技术网

Python 大熊猫群回填柱体

Python 大熊猫群回填柱体,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个类似csv的 A,B,C,D 1,2,, 1,2,30,100 1,2,40,100 4,5,, 4,5,60,200 4,5,70,200 8,9,, 第1行和第4行中缺少C值(NaN)。我想分别从第2行和第5行获取它们的值。(相同A、B值的首次出现) 如果找不到匹配的行,只需输入0(如最后一行) 预期op: A,B,C,D 1,2,30, 1,2,30,100 1,2,40,100 4,5,60, 4,5,60,200 4,5,70,200 8,9,0, 使用fillna我发现B

我有一个类似csv的

A,B,C,D
1,2,,
1,2,30,100
1,2,40,100
4,5,,
4,5,60,200
4,5,70,200
8,9,,
第1行和第4行中缺少C值(
NaN
)。我想分别从第2行和第5行获取它们的值。(相同A、B值的首次出现)

如果找不到匹配的行,只需输入0(如最后一行) 预期op:

A,B,C,D
1,2,30,
1,2,30,100
1,2,40,100
4,5,60,
4,5,60,200
4,5,70,200
8,9,0,

使用
fillna
我发现
B填充:使用下一个有效观察值来填充间隙
,但必须逻辑地进行下一个
观察值(查看列A、B值)不仅是即将到来的C列值

您还必须首先在
A
B
上调用
df.groupby
,然后应用
bfill
函数:

In [501]: df.C = df.groupby(['A', 'B']).apply(lambda x: x.C.bfill()).reset_index(drop=True)

In [502]: df
Out[502]: 
   A  B   C      D
0  1  2  30    NaN
1  1  2  30  100.0
2  1  2  40  100.0
3  4  5  60    NaN
4  4  5  60  200.0
5  4  5  70  200.0
6  8  9   0    NaN
您还可以分组,然后直接调用
dfGroupBy.bfill
(我认为这样会更快):

如果您希望清除
D
中的
NaN
s,可以执行以下操作:

df.D.fillna('', inplace=True)

但下一个观察结果必须符合逻辑(查看列A、B值)
你能详细说明吗?假设第5行有4,7,70100,然后第6行是4,5,60200,即使如此,60也应该放在第4行C列,而不是70列。因为第6行(匹配4,5)而不是第5行(4,7)。我希望我很清楚谢谢@COLDSPEED它对我很好。
df.D.fillna('', inplace=True)