我正在用一个图书发行商的例子来处理pandas中的数据帧
仓库生成.csv文件,将具有相同标题的书籍的已签名和未签名(由作者)副本视为不同的行,例如:
TITLE // STOCK
A song of ice and fire // 5
A song of ice and fire (signed) // 1
但是,我希望每个标题都是一行,但有一个额外的列用于签名股票,例如:
TITLE // STOCK // SIGNED STOCK
A song of ice and fire // 5 // 1
我已经成功地将CSV读入pandas数据帧,并添加了一个名为SIGNED STOCK
的空白列,用零填充。我还清理了代码,去掉了空格和NaN
但是,我不知道如何在行中搜索带有子字符串(signed)
的标题,然后将股票添加到相关标题的相关SIGNED STOCK
列中。非常感谢您的帮助!:)
IBS_combined = pd.read_csv("IBS_21_05_19.csv",usecols=[3,12,21],encoding='latin-1')
IBS_combined.columns= ['Product', 'ISBN','Stock']
IBS_combined['Signed Stock']='0'
IBS_combined.replace(['Product'], np.nan, inplace=True)
IBS_combined.dropna(subset=['Product'], inplace=True)
您可以将数据帧拆分为两个分别具有有符号行和无符号行的df,然后合并结果。下面是一个例子(假设ISBN是识别一本书的唯一键,同一本书中有签名或无签名股票的条目不应超过1个):
设置包含ISBN的示例数据:
仅1个未签名的库存条目
根据下面的掩码
m
,将数据帧拆分为两个数据帧:df[m]
数据框无符号:
df[~m]
格式化df_signed(将
ISBN
设置为索引,重命名列并从标题列中删除子字符串'(signed)':设置df\u unsigned并使用DataFrame.combine_first()与df\u signed连接
重新排列列的顺序:
你可以这样做:
然后,您可以循环通过签名并添加金额
相关问题 更多 >
编程相关推荐