我有一个csv文件,像下面的列表(它有数千行);
name,location,time
james,ond,5
conor,aas,2
james,jja,3
elisa,aab,1
mike,sjs,1
elisa,ond,5
elisa,mmm,2
我如何将其转换为(基本上是将第二列(位置)中的值作为新列,在名称中搜索每个列,并使名称不重复,如果新列中没有值,则将0作为新列中的值。代码的预期结果是:
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
到目前为止,我尝试的是将它作为两个不同的数据库加载两次,并获得一个值,但它总是失败,给出与之前完全相同的结果。
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')
或使用以下代码提取值,但仍然不起作用:
df1.merge(df2, on=['name','location'], how='left').fillna(0)
2条答案
按热度按时间vxqlmq5t1#
您可以使用
pd.crosstab
:输出量:
这里
location
是列名,可以通过df.columns.name = None
去掉它z9zf31ra2#
也许这就是您正在寻找的解决方案:
给定 Dataframe
df
输出量:
注意,如果
name
和location
的相同组合有不同的值,则必须选择一个合适的aggfunc
,以便正确显示所需的值。