首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在pandas数据帧中组合两列文本

在pandas数据帧中组合两列文本
EN

Stack Overflow用户
提问于 2013-10-15 17:42:53
回答 18查看 1.3M关注 0票数 740

我有一个使用pandas的Python格式的20x4000数据帧。这些列中有两列被命名为

..。我想创建一个名为

这使得

变成

..。

有人能帮上忙吗?

EN

回答 18

Stack Overflow用户

发布于 2016-04-28 18:02:09

小数据集(< 150行)

代码语言:javascript
复制
[''.join(i) for i in zip(df["Year"].map(str),df["quarter"])]

或者稍微慢一点,但更紧凑:

代码语言:javascript
复制
df.Year.str.cat(df.quarter)

更大的数据集(> 150行)

代码语言:javascript
复制
df['Year'].astype(str) + df['quarter']

更新:

时序图Pandas 0.23.4

让我们在200K行DF上测试它:

代码语言:javascript
复制
In [250]: df
Out[250]:
   Year quarter
0  2014      q1
1  2015      q2

In [251]: df = pd.concat([df] * 10**5)

In [252]: df.shape
Out[252]: (200000, 2)

更新:

使用Pandas 0.19.0的新计时

计时

不进行CPU/GPU优化(从最快到最慢排序):

代码语言:javascript
复制
In [107]: %timeit df['Year'].astype(str) + df['quarter']
10 loops, best of 3: 131 ms per loop

In [106]: %timeit df['Year'].map(str) + df['quarter']
10 loops, best of 3: 161 ms per loop

In [108]: %timeit df.Year.str.cat(df.quarter)
10 loops, best of 3: 189 ms per loop

In [109]: %timeit df.loc[:, ['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 567 ms per loop

In [110]: %timeit df[['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 584 ms per loop

In [111]: %timeit df[['Year','quarter']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1)
1 loop, best of 3: 24.7 s per loop

计时

使用CPU/GPU优化:

代码语言:javascript
复制
In [113]: %timeit df['Year'].astype(str) + df['quarter']
10 loops, best of 3: 53.3 ms per loop

In [114]: %timeit df['Year'].map(str) + df['quarter']
10 loops, best of 3: 65.5 ms per loop

In [115]: %timeit df.Year.str.cat(df.quarter)
10 loops, best of 3: 79.9 ms per loop

In [116]: %timeit df.loc[:, ['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 230 ms per loop

In [117]: %timeit df[['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 230 ms per loop

In [118]: %timeit df[['Year','quarter']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1)
1 loop, best of 3: 9.38 s per loop

回答贡献者

@anton-vbr

票数 353
EN

Stack Overflow用户

发布于 2015-09-12 01:36:18

代码语言:javascript
复制
df = pd.DataFrame({'Year': ['2014', '2015'], 'quarter': ['q1', 'q2']})
df['period'] = df[['Year', 'quarter']].apply(lambda x: ''.join(x), axis=1)

生成此数据帧

代码语言:javascript
复制
Year quarter  period
0  2014      q1  2014q1
1  2015      q2  2015q2

此方法可泛化为任意数量的字符串列,方法是将

对于数据帧的任何列切片,例如

..。

您可以查看有关apply()方法的更多信息

这里

票数 310
EN

Stack Overflow用户

发布于 2016-03-08 02:04:05

方法

访问者

在这一点上,效果真的很好:

代码语言:javascript
复制
>>> import pandas as pd
>>> df = pd.DataFrame([["2014", "q1"], 
...                    ["2015", "q3"]],
...                   columns=('Year', 'Quarter'))
>>> print(df)
   Year Quarter
0  2014      q1
1  2015      q3
>>> df['Period'] = df.Year.str.cat(df.Quarter)
>>> print(df)
   Year Quarter  Period
0  2014      q1  2014q1
1  2015      q3  2015q3

甚至允许您添加分隔符,例如,假设您只有年份和期间的整数,您可以这样做:

代码语言:javascript
复制
>>> import pandas as pd
>>> df = pd.DataFrame([[2014, 1],
...                    [2015, 3]],
...                   columns=('Year', 'Quarter'))
>>> print(df)
   Year Quarter
0  2014       1
1  2015       3
>>> df['Period'] = df.Year.astype(str).str.cat(df.Quarter.astype(str), sep='q')
>>> print(df)
   Year Quarter  Period
0  2014       1  2014q1
1  2015       3  2015q3

连接多个列只需将序列列表或包含除第一列之外的所有列的数据帧作为参数传递给

在第一列(系列)上调用:

代码语言:javascript
复制
>>> df = pd.DataFrame(
...     [['USA', 'Nevada', 'Las Vegas'],
...      ['Brazil', 'Pernambuco', 'Recife']],
...     columns=['Country', 'State', 'City'],
... )
>>> df['AllTogether'] = df['Country'].str.cat(df[['State', 'City']], sep=' - ')
>>> print(df)
  Country       State       City                   AllTogether
0     USA      Nevada  Las Vegas      USA - Nevada - Las Vegas
1  Brazil  Pernambuco     Recife  Brazil - Pernambuco - Recife

请注意,如果您的pandas dataframe/series具有空值,则需要包括参数na

_

表示将NaN值替换为字符串,否则组合列默认为NaN。

票数 180
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19377969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档