Pandas在没有赋值的情况下更改DataFrame中的行

时间:2018-06-06 18:28:39

标签: python pandas

假设我们有一个Python Pandas DataFrame:

In[1]: df = pd.DataFrame({'A': [1, 1, 2, 3, 5],
                          'B': [5, 6, 7, 8, 9]})

In[2]: print(df)
    A  B
 0  1  5
 1  1  6
 2  2  7
 3  3  8
 4  5  9

我想更改符合特定条件的行。我知道这可以通过直接分配来完成:

In[3]: df[df.A==1] = pd.DataFrame([{'A': 0, 'B': 5}, 
                                   {'A': 0, 'B': 6}])

In[4]: print(df)
    A  B
 0  0  5
 1  0  6
 2  2  7
 3  3  8
 4  5  9

我的问题是:是否有上述分配的等效解决方案返回更改行的新DataFrame,即无状态解决方案?我正在寻找像pandas.DataFrame.assign这样的东西,但是它取决于行而不是列。

1 个答案:

答案 0 :(得分:1)

DataFrame.copy

df2 = df.copy()
df2[df.A == 1] = pd.DataFrame([{'A': 0, 'B': 5}, {'A': 0, 'B': 6}])

DataFrame.mask + fillna

m = df.A == 1
fill_df = pd.DataFrame([{'A': 0, 'B': 5}, {'A': 0, 'B': 6}], index=df.index[m])
df2 = df.mask(m).fillna(fill_df)