我有一个现有的数据框架,我需要添加一个额外的列,其中将包含每一行相同的值。
现有的df:
Date, Open, High, Low, Close
01-01-2015, 565, 600, 400, 450
新df:
Name, Date, Open, High, Low, Close
abc, 01-01-2015, 565, 600, 400, 450
我知道如何附加现有的系列/数据帧列。但这是一个不同的情况,因为我所需要的是添加'Name'列,并将每一行设置为相同的值,在本例中为'abc'。
我想让大家更多地关注一下@michele-piccolini的部分回答。
我坚信.assign是最好的解决方案。在现实世界中,这些操作不是孤立的,而是在一系列操作中。如果你想要支持一个操作链,你可能应该使用.assign方法。
下面是一个使用滑雪胜地降雪数据的例子(但同样的原则也适用于……金融数据)。
这段代码读起来像一个步骤食谱。赋值(with =)和.insert都让这变得更加困难:
raw = pd.read_csv('https://github.com/mattharrison/datasets/raw/master/data/alta-noaa-1980-2019.csv',
parse_dates=['DATE'])
def clean_alta(df):
return (df
.loc[:, ['STATION', 'NAME', 'LATITUDE', 'LONGITUDE', 'ELEVATION', 'DATE',
'PRCP', 'SNOW', 'SNWD', 'TMAX', 'TMIN', 'TOBS']]
.groupby(pd.Grouper(key='DATE', freq='W'))
.agg({'PRCP': 'sum', 'TMAX': 'max', 'TMIN': 'min', 'SNOW': 'sum', 'SNWD': 'mean'})
.assign(LOCATION='Alta',
T_RANGE=lambda w_df: w_df.TMAX-w_df.TMIN)
)
clean_alta(raw)
请注意.assign(LOCATION='Alta'这一行,它在其余操作中间创建了一个包含单个值的列。
df['Name']='abc'将添加新列,并将所有行设置为该值:
In [79]:
df
Out[79]:
Date, Open, High, Low, Close
0 01-01-2015, 565, 600, 400, 450
In [80]:
df['Name'] = 'abc'
df
Out[80]:
Date, Open, High, Low, Close Name
0 01-01-2015, 565, 600, 400, 450 abc
append方法自Pandas 1.4.0以来已弃用
因此,只有在使用实际的pandas DataFrame对象时才使用上述方法:
df["column"] = "value"
或者,如果在DataFrame副本的视图上设置值,请使用concat()或assign():
通过这种方式,新创建的Series具有与原始DataFrame相同的索引,因此将匹配精确的行
# adds a new column in view `where_there_is_one` named
# `client` with value `display_name`
# `df` remains unchanged
df = pd.DataFrame({"number": ([1]*5 + [0]*5 )})
where_there_is_one = df[ df["number"] == 1]
where_there_is_one = pd.concat([
where_there_is_one,
pd.Series(["display_name"]*df.shape[0],
index=df.index,
name="client")
],
join="inner", axis=1)
# Or use assign
where_there_is_one = where_there_is_one.assign(client = "display_name")
输出:
where_there_is_one: df:
| 0 | number | client | | 0 | number |
| --- | --- | --- | |---| -------|
| 0 | 1 | display_name | | 0 | 1 |
| 1 | 1 | display_name | | 1 | 1 |
| 2 | 1 | display_name | | 2 | 1 |
| 3 | 1 | display_name | | 3 | 1 |
| 4 | 1 | display_name | | 4 | 1 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 0 |