Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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代码的R脚本_Python_Python 3.x_Pandas - Fatal编程技术网

Python代码的R脚本

Python代码的R脚本,python,python-3.x,pandas,Python,Python 3.x,Pandas,我开始深入研究Python,在将一些R脚本转换为Python时遇到了困难。我在R中定义了一个函数: Shft_Rw <- function(x) { for (row in 1:nrow(x)) { new_row = x[row , c(which(!is.na(x[row, ])), which(is.na( x[row, ])))] colnames(new_row) = colnames(x) x[row, ] = new_row } return(x) }

我开始深入研究Python,在将一些R脚本转换为Python时遇到了困难。我在R中定义了一个函数:

Shft_Rw <- function(x) { for (row in 1:nrow(x))
{
  new_row = x[row , c(which(!is.na(x[row, ])), which(is.na( x[row, ])))]
  colnames(new_row) = colnames(x)
  x[row, ] = new_row
}
  return(x)  
}
变成:

df2 =pd.DataFrame({'a':[3,4,3],'b':[3,np.nan,5],'c':[np.nan, np.nan,5]})
df2
Out[157]: 
   a    b    c
0  3  3.0  NaN
1  4  NaN  NaN
2  3  5.0  5.0
到目前为止,我已经:

def Shft_Rw(x):
    for row in np.arange(0,x.shape[0]):
        new_row = x.iloc[row,[np.where(pd.notnull(x.iloc[row])),np.where(pd.isnull(df.iloc[row]))]]
但是投掷错误。使用上面的示例df,我可以使用iloc和它为null/不为null的列位置(使用where())获得一个行索引,但不能将两者放在一起(尝试了许多带有更多括号的变体等)

是否有人能够帮助复制功能和/或展示更有效的解决问题的方法

谢谢

用于:

如果性能很重要,我建议使用以下完美选项:


像“2”和“3”这样的行应该发生什么?预期输出是“2 NaN 3”还是“3 2 NaN”?出于分析的特定目的,我将使用最后的实际结果进行正向填充,或进行简单的线性插值,即(2,2,3)或(2,2.5,3)。更进一步地说,如果原始行是(NA,NA,2,NA,3),我希望将其转换为:(2,2,3,NA,NA)我还没有在我的数据集中看到任何这样的实例,但这是一个很好的问题,因为我确信会出现这样的实例。太棒了!这起作用了——只需做一个临时步骤。显然,使用groupby会将nan的值更改为0,所以在解决方案之前只需执行.replace(0,np.nan)。谢谢@你好,伙计,不客气!感谢您接受1您也可以向上投票-单击接受标记上方的小三角形
0
。谢谢。转念一想,可能是.aggregate(np.sum)转换了nan的值s@HowdyDude我认为可以使用
.sum(minu count=1)
代替
.aggregate(np.sum)
,chek
def Shft_Rw(x):
    for row in np.arange(0,x.shape[0]):
        new_row = x.iloc[row,[np.where(pd.notnull(x.iloc[row])),np.where(pd.isnull(df.iloc[row]))]]
df.iloc[1]
Out[170]: 
a    NaN
b    NaN
c    4.0

np.where(pd.isnull(df.iloc[1]))
In[167] :  np.where(pd.isnull(df.iloc[1]))
Out[167]: (array([0, 1], dtype=int64),)

df.iloc[1,np.where(pd.notnull(df.iloc[1]))]
df1 = df.apply(lambda x: pd.Series(x.dropna().values), axis=1)
df1.columns = df.columns
print (df1)
     a    b    c
0  3.0  3.0  NaN
1  4.0  NaN  NaN
2  3.0  5.0  5.0
arr = justify(df.values, invalid_val=np.nan, axis=1, side='left')
df1 = pd.DataFrame(arr, index=df.index, columns=df.columns)
print (df1)
     a    b    c
0  3.0  3.0  NaN
1  4.0  NaN  NaN
2  3.0  5.0  5.0