首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R interaction()函数的Python等效项

R interaction()函数的Python等效项
EN

Stack Overflow用户
提问于 2020-09-21 13:12:25
回答 2查看 174关注 0票数 2

在python中,有没有一种直接的方法来产生不同变量之间的交互?例如,在R中,假设我有3个不同的因素要考虑: a,b和c,并且我想创建一个新的变量,以显示这三个因素对于特定观察的特定组合。

代码语言:javascript
复制
> a = c(1, 2, 2, 2, 3)
> b = c(2, 3, 3, 3, 2)
> c = c('m', 'm', 'f', 'f', 'f')
> interaction(a, b, c)
[1] 1.2.m 2.3.m 2.3.f 2.3.f 3.2.f
12 Levels: 1.2.f 2.2.f 3.2.f 1.3.f 2.3.f 3.3.f 1.2.m 2.2.m 3.2.m ... 3.3.m

我希望能够使用这个交互概念在pandas数据框架中创建一个新列。例如,假设我有一个数据帧:

代码语言:javascript
复制
df = pd.DataFrame({"a": [1, 2, 2, 2, 3]
  , 'b': [2, 3, 3, 3, 2]
  , 'c': ['m', 'm', 'f', 'f', 'f']})

我可以使用下面的代码来实现我正在寻找的东西:

代码语言:javascript
复制
df['d'] = df.a.astype(str) + '_' + df.b.astype(str) + '_' + df.c

是否已经有一个内置的函数或方法可以实现这一点?我想唯一的区别是我不必事先显式地键入因子。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-21 13:16:21

对多个Series使用Series.str.cat方法

代码语言:javascript
复制
df['d'] = df.a.astype(str).str.cat([df.b.astype(str), df.c], sep='.')
print (df)
   a  b  c      d
0  1  2  m  1.2.m
1  2  3  m  2.3.m
2  2  3  f  2.3.f
3  2  3  f  2.3.f
4  3  2  f  3.2.f

或者使用DataFrame选择的b,c列:

代码语言:javascript
复制
df['d'] = df.a.astype(str).str.cat(df[['b','c']].astype(str), sep='.')
print (df)
   a  b  c      d
0  1  2  m  1.2.m
1  2  3  m  2.3.m
2  2  3  f  2.3.f
3  2  3  f  2.3.f
4  3  2  f  3.2.f

对于新列的所有列:

代码语言:javascript
复制
df['d'] = df.astype(str).agg('.'.join, axis=1)
#alternative
df['d'] = df.astype(str).apply('.'.join, axis=1)
print (df)
   a  b  c      d
0  1  2  m  1.2.m
1  2  3  m  2.3.m
2  2  3  f  2.3.f
3  2  3  f  2.3.f
4  3  2  f  3.2.f
票数 2
EN

Stack Overflow用户

发布于 2020-09-21 13:28:59

将所有内容转换为字符串,将每一行转换为列表,并连接列表元素:

代码语言:javascript
复制
df.astype(str).apply(list, axis=1).str.join(".")
#0    1.2.m
#1    2.3.m
#2    2.3.f
#3    2.3.f
#4    3.2.f

这种方法比你的方法更快,但比@jezrael提出的任何方法都要慢。

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

https://stackoverflow.com/questions/63986510

复制
相关文章

相似问题

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