如何解决熊猫:关于用熊猫比较和重新计算字段的新手问题
数据如下所示:
store;ean;price;retail_price;quantity
001;0888721396226;200;200;2
001;0888721396233;200;159;2
001;2194384654084;299;259;7
001;2194384654091;199.95;199.95;8
如果“price”等于“retail_price”,则字段retail_price 必须减少给定的百分比值,例如-10%
因此在示例数据中,第一行和最后一行应更改为 180 和 179,955
我对熊猫完全陌生,在阅读“入门”部分后,我没有找到任何可以设置的内容......
所以任何帮助或提示(只是指出我的方向,然后我会自己解决)表示赞赏,
亲切的问候!
解决方法
使用 Series.eq
比较两个值,如果相同的多个 retail_price
by 0.9
else not in numpy.where
:
mask = df['price'].eq(df['retail_price'])
df['retail_price'] = np.where(mask,df['retail_price'].mul(0.9),df['retail_price'])
print (df)
store ean price retail_price quantity
0 1 888721396226 200.00 180.000 2
1 1 888721396233 200.00 159.000 2
2 1 2194384654084 299.00 259.000 7
3 1 2194384654091 199.95 179.955 8
或者您可以将 DataFrame.loc
用于多个仅匹配的行 0.9
:
mask = df['price'].eq(df['retail_price'])
df.loc[mask,'retail_price'] *= 0.9
#working like
df.loc[mask,'retail_price'] = df.loc[mask,'retail_price'] * 0.9
编辑:对于不匹配掩码的过滤器行(掩码中有 Falses)使用:
df2 = df[~mask].copy()
print (df2)
store ean price retail_price quantity
1 1 888721396233 200.0 159.0 2
2 1 2194384654084 299.0 259.0 7
print (mask)
0 True
1 False
2 False
3 True
dtype: bool
,
这是我的代码:
import pandas as pd
import numpy as np
import sys
with open('prozente.txt','r') as f: #create multiplicator from static value in File "prozente.txt"
prozente = int(f.readline())
mulvalue = 1-(prozente/100)
df = pd.read_csv('1.csv',sep=';',header=1,names=['store','ean','price','retail_price','quantity'])
mask = df['price'].eq(df['retail_price'])
df['retail_price'] = np.where(mask,df['retail_price'].mul(mulvalue).round(2),df['retail_price'])
df2 = df[~mask].copy()
df.to_csv('output.csv',columns=['store','quantity'],index=False)
print(df)
print(df2)
将此用作 1.csv:
store;ean;price;retail_price;quantity
001;0888721396226;200;200;2
001;0888721396233;200;159;2
001;2194384654084;299;259;7
001;2194384654091;199.95;199.95;8
文件“prozente.txt”的内容是
25
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。