所以我有一個包含多個列的資料框,其中包含數字。它看起來像這樣:
| H | C | 噸 | 磷 | R |
|---|---|---|---|---|
| 300 | 200 | 500 | 0.3 | |
| 500 | 400 | 300 | 0.2 |
我正在嘗試對 H、C、T、P 列執行操作并填寫 R 列。
例如,
df['R'] = numpy.where(df['H'] > df['T'] and df['P'] > 0,
df['C'] / df['T'] - 1, 0)
我希望逐行執行操作
- 當第 n 行 'H' 的值 > 第 n 行 'T' 的值
- 當第 n 行 'P' 中的值大于 0 時
但是如果我運行代碼,我會得到“ValueError:一個系列的真值是不明確的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 "
我需要解決什么問題?也許我需要使用 row['column name']?任何幫助表示贊賞!
uj5u.com熱心網友回復:
您應該使用按位&和括號,而不是and.
df['R'] = numpy.where((df['H'] > df['T']) & (df['P'] > 0),
df['C'] / df['T'] - 1, 0)
uj5u.com熱心網友回復:
試試這個。
import pandas as pd
d = {'H': [300, 500], 'C': [200, 400], 'T': [500, 300], 'P': [0.3, 0.2]}
df = pd.DataFrame(d)
df
創建一個函式:
def calc(row):
if row[0] > row[2]:
if row[3] > 0:
return row[1]/row[2] - 1
else:
return 0
然后按行應用函式
df['R'] = df.apply(calc, axis=1)
df
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/475080.html
上一篇:如何合并跨越2年的冬季月份?
