簡體   English   中英

如何將數據從一列移動到另一列 Python DataFrame

[英]How do I move data from one column to another in Python DataFrame

DataFrame 'Product', 'Type', 'Rating', 'Reviews' and 'Category' 有五欄。

DataFrame 看起來像這樣:

  Product    Type     Rating  Reviews    Category 
1  'A'      'Free'     5       10         1
2  'B'        2       19        3         NaN
3  'C'      'Free'     3       15         1
4  'D'      'Paid'     4       20         2

我只想修改包含 NaN 的行。 在我的例子中,我只需要通過保持其他索引(行)值不變來移動索引 2(第 2 行)中的值。

生成的 DataFrame 應如下所示:

  Product    Type     Rating  Reviews    Category 
1  'A'      'Free'     5       10         1
2  'B'       NaN       2       19         3         
3  'C'      'Free'     3       15         1
4  'D'      'Paid'     4       20         2

您可以使用方法shift

df.loc[2, 'Type':] = df.loc[2, 'Type':].shift()

Output:

  Product    Type Rating  Reviews  Category
1     'A'  'Free'      5       10       1.0
2     'B'     NaN      2       19       3.0
3     'C'  'Free'      3       15       1.0
4     'D'  'Paid'      4       20       2.0

其中一種選擇是利用numpy.where ,您可以使用它輕松控制數據流。

這可能不是最好的方法,但它是最簡單的方法之一,而且很清楚這里發生了什么:

import numpy as np

(
   df_data.assign(
      Type=lambda df: np.where(
         pd.isnull(df["Category"]),
         np.nan,
         df["Type"]
      ),
      Rating=lambda df: np.where(
         pd.isnull(df["Category"]),
         df["Type"],
         df["Rating"]
      ),
      Reviews=lambda df: np.where(
         pd.isnull(df["Category"]),
         df["Rating"],
         df["Reviews"]
      ),
      Category=lambda df: np.where(
         pd.isnull(df["Category"]),
         df["Reviews"],
         df["Category"]
      )
   ) 
)

如果多個列包含 NaN,您可以使用以下語法:

np.where(
  (df["Category"].isna()) | (df["Type"].isna()),   # or
  ...
)

您可以使用Dataframe.isnullDataFrame.anyDataFrame.shift來實現它:

mask = df.isnull().any(1)
df.loc[mask,"Type":]] = df.loc[mask,"Type":]].shift(axis = 1)
print(df)
#  Product    Type Rating  Reviews  Category
#1     'A'  'Free'      5       10       1.0
#2     'B'     NaN      2       19       3.0
#3     'C'  'Free'      3       15       1.0
#4     'D'  'Paid'      4       20       2.0

使用掩碼,您可以確定哪些行具有NaN值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM