首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于raws值生成新列

如何基于raws值生成新列
EN

Stack Overflow用户
提问于 2022-10-05 16:08:26
回答 2查看 57关注 0票数 0

我有一个csv文件,如下面的列表(它有数千行);

代码语言:javascript
复制
name,location,time
james,ond,5
conor,aas,2
james,jja,3
elisa,aab,1
mike,sjs,1
elisa,ond,5
elisa,mmm,2

如何将其转换为(基本地将第二列(location)中的值作为新列,搜索每个列的名称并使名称不重复,如果不存在则将0作为值放在新列上。守则的预期结果是:

代码语言:javascript
复制
name,ond,aas,jja,aab,sjs,mmm
james,5,0,3,0,0,0
conor,0,2,0,0,0,0
elisa,5,0,0,1,0,2
mike,0,0,0,0,1,0

到目前为止,我尝试这样做的是将它作为两个不同的数据库加载两次并得到一个值,但是它总是失败,给出了完全相同的结果。

代码语言:javascript
复制
import pandas as pd
df1 = pd.read_csv("file.csv")
df2 = pd.read_csv("file.csv")

df1['time'] = df2['time'].where(df1[['name','location']].isin(df2).all(axis=1)).fillna('0')

或下面的代码来提取值,但仍然无法工作:

代码语言:javascript
复制
df1.merge(df2, on=['name','location'], how='left').fillna(0)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-05 16:28:08

您可以使用pd.crosstab

代码语言:javascript
复制
pd.crosstab(index=df['name'], columns=df['location'], values=df['time'], aggfunc=lambda x: x).\
            fillna(0).reset_index()

输出:

代码语言:javascript
复制
location    name    aab aas jja mmm ond sjs
0          conor    0.0 2.0 0.0 0.0 0.0 0.0
1          elisa    1.0 0.0 0.0 2.0 5.0 0.0
2          james    0.0 0.0 3.0 0.0 5.0 0.0
3           mike    0.0 0.0 0.0 0.0 0.0 1.0

在这里,location是列名,您可以通过df.columns.name = None去掉它

票数 1
EN

Stack Overflow用户

发布于 2022-10-05 16:28:33

也许这就是你想要的解决方案:

给定数据格式的df

代码语言:javascript
复制
    name location  time
0  james      ond     5
1  conor      aas     2
2  james      jja     3
3  elisa      aab     1
4   mike      sjs     1
5  elisa      ond     5
6  elisa      mmm     2

import pandas as pd
pivot = pd.pivot_table(df, values='time', index='name', columns='location', aggfunc='sum', fill_value=0)

输出:

代码语言:javascript
复制
location  aab  aas  jja  mmm  ond  sjs
name                                  
conor       0    2    0    0    0    0
elisa       1    0    0    2    5    0
james       0    0    3    0    5    0
mike        0    0    0    0    0    1

请注意,如果对于相同的namelocation组合有不同的值,则必须选择适当的aggfunc,以正确显示所需的值。Ypu还可以将dictionary传递给aggfunc值,如Discussion on aggfunc中所解释的那样。

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

https://stackoverflow.com/questions/73963277

复制
相关文章

相似问题

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