![](/img/trans.png)
[英]How do I merge data from one row to another by keeping some column values unchanged in 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.isnull
、 DataFrame.any
和DataFrame.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.