在Pandas DataFrame Python中添加新列

Add new column in Pandas DataFrame Python

本问题已经有最佳答案,请猛点这里访问。

我在熊猫中有数据框架,例如:

1
2
3
4
Col1 Col2
A     1
B     2
C     3

现在,如果我想再添加一个名为col3的列,该值基于col2。在公式中,如果col2>1,则col3为0,否则为1。所以,在上面的例子中。输出将是:

1
2
3
4
Col1 Col2 Col3
A    1    1
B    2    0
C    3    0

你知道如何做到这一点吗?


你只是做了一个相反的比较。if Col2 <= 1。这将返回一个布尔序列,其中False值用于大于1的值,True值用于另一个值。如果你把它转换成int64数据类型,True变成1False变成0

1
df['Col3'] = (df['Col2'] <= 1).astype(int)

如果您想要一个更通用的解决方案,您可以根据Col2的值为Col3分配任何数字,您应该这样做:

1
df['Col3'] = df['Col2'].map(lambda x: 42 if x > 1 else 55)

或:

1
2
3
4
df['Col3'] = 0
condition = df['Col2'] > 1
df.loc[condition, 'Col3'] = 42
df.loc[~condition, 'Col3'] = 55


我发现向数据帧添加列的最简单方法是使用"add"函数。这是一段代码,还有一个输出到csv文件的代码片段。请注意,包含"columns"参数允许您设置列的名称(恰好与我用作数据源的np.array的名称相同)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#  now to create a PANDAS data frame
df = pd.DataFrame(data = FF_maxRSSBasal, columns=['FF_maxRSSBasal'])
# from here on, we use the trick of creating a new dataframe and then"add"ing it
df2 = pd.DataFrame(data = FF_maxRSSPrism, columns=['FF_maxRSSPrism'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = FF_maxRSSPyramidal, columns=['FF_maxRSSPyramidal'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = deltaFF_strainE22, columns=['deltaFF_strainE22'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = scaled, columns=['scaled'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = deltaFF_orientation, columns=['deltaFF_orientation'])
df = df.add( df2, fill_value=0 )
#print(df)
df.to_csv('FF_data_frame.csv')