熊猫.DataFrame—根据另一列中的值是否出现创建一个新列



我是一个业余用户,有一些VBA经验,但试图切换到Python,因为我漂亮的新MBP运行VBA悲惨。我正在尝试创建一个df列,基于是否已经出现了另一个列值。如果有,则该行的新列值为0,如果不是1。

例如:我想在下面的例子中创建C列。我怎样才能快速完成?

A     B        C (to create column C)
0     001   USA      1
1     002   Canada   1 
3     003   China    1
4     004   India    1
5     005   UK       1
6     006   Japan    1
7     007   USA      0
8     008   UK       0

您可以检查'B'列上的重复项,并将重复项设置为0。然后像这样将所有非重复项设置为1:

df = pd.DataFrame({'A':[1, 2, 3, 4, 5, 6, 7, 8], 'B':['USA', 'Canada', 'China', 'India', 'UK', 'Jpan', 'USA', 'UK']})
df.loc[df['B'].duplicated(), 'C'] = 0
df['C'] = df['C'].fillna(1).astype(int)
print(df)

输出:

A       B  C
0  1     USA  1
1  2  Canada  1
2  3   China  1
3  4   India  1
4  5      UK  1
5  6    Jpan  1
6  7     USA  0
7  8      UK  0

创建完数据框架后:

import pandas as pandas
data = [["001", "USA"], ["002", "Canada"], ["003", "China"],
["004", "India"], ["005", "UK"], ["006", "Japan"], ["007", "USA"], ["008", "UK"]]
# Create a dataframe
df = pandas.DataFrame(data, columns=["A", "B"])

您可以将函数应用于其中一列(在您的示例中是B列)的每个值,并将函数的输出作为您的列的值。

df["C"] = df.B.apply(lambda x: 1 if df.B.value_counts()[x] == 1 else 0)

这将检查B列中的值是否出现在列的其他地方,如果唯一则返回1,如果重复则返回0

数据框看起来像这样:

A       B  C
0  001     USA  0
1  002  Canada  1
2  003   China  1
3  004   India  1
4  005      UK  0
5  006   Japan  1
6  007     USA  0
7  008      UK  0

如果您希望每次都重新计算值,则需要使用

命令
df["C"] = df.B.apply(lambda x: 1 if df.B.value_counts()[x] == 1 else 0)

每次添加一行后执行。

相关内容

最新更新