>

도와주세요! 나는 약간의 연구를 했고이 질문들은 연결되어 있지만 이것을 작동시키기 위해 마사지 할 수는 없습니다. 데이터 프레임에서 다중 이동 팬더 데이터 프레임에서 전체 열 이동 DataFrame에서 NaN 제거 및 다중 인덱스에서 중복 제거

이것은 내 문제에 가장 가깝습니다. 왼쪽으로 행 이동

내 문제 :시계열 문제이므로 첫 번째 항목이 NaN 인 경우 행을 왼쪽으로 이동하고 다른 첫 번째 NaN은 초기 값 다음에 해당 행에 유지하려고합니다.

따라서 다음과 같이 DataFrame을 시작하십시오 :

 A     B     C     D
1 10    11    23    90
2 NaN   05    NaN   56
3 11    3     Nan   11
4 NaN   NaN   56    NaN`  

내 솔루션이 잘못되었습니다. 다음과 같습니다.

df3 = df2.apply(lambda x: pd.Series(x.dropna().values),1)
df3.columns=df2.columns[:len(df3.columns)]
df3= df3.reindex_axis(df2.columns,1)

이것은(내가 원하는 것이 아닙니다!):

 A     B     C     D
1 10    11    23    90
2 05    56    NaN   NaN
3 11    3     11    NaN
4 56    NaN   NaN   NaN 

다음과 같은 DataFrame을 원합니다 :

 A     B     C     D
1 10    11    23    90
2 05    NaN   56    NaN
3 11    3     NaN   11
4 56    NaN   NaN   NaN

따라서 최첨단 NaNs  첫 번째 측정이 수행되면 이후의 모든 NaNs 가 제거됩니다.  제자리에 남아 있습니다.

지도 해 주셔서 감사합니다.

  • 답변 # 1

    아마도

    In [57]: df.apply(lambda x: x.shift(-x.notnull().values.argmax()), axis=1)
    Out[57]: 
          A     B     C     D
    1  10.0  11.0  23.0  90.0
    2   5.0   NaN  56.0   NaN
    3  11.0   3.0   NaN  11.0
    4  56.0   NaN   NaN   NaN
    
    

    <시간>

    이는 null이 아닌 첫 번째 값을 왼쪽으로 가져 오는 데 필요한만큼 많은 셀을 이동하여 작동합니다.

    In [63]: x = df.iloc[1]
    In [64]: x
    Out[64]: 
    A     NaN
    B     5.0
    C     NaN
    D    56.0
    Name: 2, dtype: float64
    In [65]: x.notnull()
    Out[65]: 
    A    False
    B     True
    C    False
    D     True
    Name: 2, dtype: bool
    In [66]: x.notnull().values
    Out[66]: array([False,  True, False,  True])
    In [67]: x.notnull().values.argmax()
    Out[67]: 1
    In [68]: x.shift(-x.notnull().values.argmax())
    Out[68]: 
    A     5.0
    B     NaN
    C    56.0
    D     NaN
    Name: 2, dtype: float64
    
    

관련 자료

  • 이전 Angular Material/Angular Flex Layout에서 public-apits를 사용하는 것은 무엇입니까?
  • 다음 자바 스크립트는 어떻게 작동합니까?