熊猫-根据索引而不是索引替换值

时间:2019-05-28 19:15:06

标签: python pandas dataframe

这是示例代码。

import pandas as pd, numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(10, 1)), columns=list('A'))

我有一个列表dl = [0,2,3,4,7]

在list指定的索引位置,我希望A列为“是”。

以下代码有效

df.loc[dl,'A']='Yes'

对于不在索引中的列值,如何用“否”填充列“ A”。 如果这是重复的帖子,请原谅我。

4 个答案:

答案 0 :(得分:5)

np.where

我假设有一种更好的方法可以同时执行'Yes''No'。如果您确实只想在获得'No'之后填写'Yes',请参考Fatemehhh的答案

df.loc[:, 'A'] = np.where(df.index.isin(dl), 'Yes', 'No')

实验部分

不代表实际建议

f = dl.__contains__
g = ['No', 'Yes'].__getitem__
df.loc[:, 'A'] = [*map(g, map(f, df.index))]

df

     A
0  Yes
1   No
2  Yes
3  Yes
4  Yes
5   No
6   No
7  Yes
8   No
9   No

答案 1 :(得分:1)

一种方法是使用isin函数。 '〜'将反转它,以便输出是不在dl中的元素。

df.loc[~df.index.isin(dl),'A']='No'

答案 2 :(得分:1)

首先用“否”填充“ A”的所有行。然后使用“是”更新/覆盖特定行。

df.loc[:,'A']='No'
df.loc[dl,'A']='Yes'

答案 3 :(得分:1)

通过使用列表dl和df列表本身之间的差异:

df.iloc[list( set(df.index) - set(dl))]  = 'No'

df.iloc[[x for x in range(len(df)) if x not in dl]] = 'No'