Python 行中的筛选器值包含用于进一步计算的特定字符串
这是我的数据帧:Python 行中的筛选器值包含用于进一步计算的特定字符串,python,pandas,filter,contains,startswith,Python,Pandas,Filter,Contains,Startswith,这是我的数据帧: In [2]: fruits = pd.DataFrame({"apple_price": [100, 100, 200, 500, 100, 600, 200], ...: "cherry_price": [2, 3, 1, 0, 2, 1, 1], ...: "banana_price": [2, 4, 5,
In [2]: fruits = pd.DataFrame({"apple_price": [100, 100, 200, 500, 100, 600, 200],
...: "cherry_price": [2, 3, 1, 0, 2, 1, 1],
...: "banana_price": [2, 4, 5, 2, 3, 5, 3],
...: "prices": ["apple_price", "apple_price", "cherry_price", "banana_price", "cherry_price",
...: "banana_price", "apple_price"],
...: "price_fruits": [100, 100, 100, 2, 3, 5, 200]})
In [3]: fruits
Out[3]:
apple_price cherry_price banana_price prices price_fruits
0 100 2 2 apple_price 100
1 100 3 4 apple_price 100
2 200 1 5 cherry_price 100
3 500 0 2 banana_price 2
4 100 2 3 cherry_price 3
5 600 1 5 banana_price 5
6 200 1 3 apple_price 200
基本上,苹果的价格[苹果价格]必须除以100(因为苹果价格中的价格是以美分而不是欧元表示的),而其他水果的价格应该保持不变
这就是我的预期输出:
In [5]: fruits_ad
Out[5]:
apple_price cherry_price banana_price prices price_fruits pr_fruits_adjusted
0 100 2 2 apple_price 100 1
1 100 3 4 apple_price 100 1
2 200 1 5 cherry_price 100 1
3 500 0 2 banana_price 2 2
4 100 2 3 cherry_price 3 3
5 600 1 5 banana_price 5 5
6 200 1 3 apple_price 200 2
谢谢大家!
再见
Ra根据条件对价格进行调整可以这样做:
fruits['pr_fruits_adjusted'] = np.where((fruits.price_fruits >=100), fruits['price_fruits']/100, fruits['price_fruits']).astype('int32')
您可以根据需要更改条件。这里我写了一个条件,如果价格大于或等于100,则进行调整。
fruits.price\u fruits>=100
对不起,伙计们,我太急了,把示例数据框弄乱了
你看,伙计:
你从这里开始
In [2]: fruits = pd.DataFrame({"Variety": ["apple_price", "cherry_price", "banana_price", "apple_price", "banana_price"
...: ],
...: "Price": [100, 2, 3, 200, 3]})
In [3]: fruits
Out[3]:
Variety Price
0 apple_price 100
1 cherry_price 2
2 banana_price 3
3 apple_price 200
4 banana_price 3
这应该是预期的输出:
In [4]: fruits_adj = pd.DataFrame({"Variety": ["apple_price", "cherry_price", "banana_price", "apple_price", "banana_pr
...: ice"], ^M
...: "Price": [100, 2, 3, 200, 3], ^M
...: "Price_Adj": [1, 2, 3, 2, 3]})
In [5]: fruits_adj
Out[5]:
Variety Price Price_Adj
0 apple_price 100 1
1 cherry_price 2 2
2 banana_price 3 3
3 apple_price 200 2
4 banana_price 3 3
简而言之,我要查找的代码将字符串拆分为“Variance”列,并检查我是否包含“apple”,如果此条件==True,则应将apple_价格除以100,否则从“price”列中获取相应水果的价格
这是我的尝试也许你有更优雅的东西:
In [6]: chk = fruits_adj['Variety'].str.contains(r'apple', na=True)
In [7]: fruits.loc[chk, "Price_Adj"] = fruits["Price"] / 100
In [8]: fruits.loc[~chk, "Price_Adj"] = fruits["Price"]
In [9]: fruits
Out[9]:
Variety Price Price_Adj
0 apple_price 100 1.0
1 cherry_price 2 2.0
2 banana_price 3 3.0
3 apple_price 200 2.0
4 banana_price 3 3.0
干杯
Ra到目前为止您尝试了什么?为什么
cherry
的price
是1而不是100?它应该更具动态性,比如lamba x:fruits.prices.str.startswith(“apple_”)/100,如果x==fruits.prices.str.startswith(“apple_”)else fruits.prices。我能理解的是您希望根据字符串列进行调整。但正如我从你提供的数据中看到的,cherry_的价格是以美分和欧元的形式给出的。这不是自相矛盾吗?例如,当您调整cherry_价格时,欧元价格也将进行调整。