python - 基于索引的条件数据框创建
问题描述
Val1 Val2
x 10 1.05 2.01
x 14 2.98 5.98
x 16 1.01 1.02
y 10 0.02 0.07
y 11 0.01 0.01
z 10 2.11 1.17
z 12 0.08 0.08
z 13 3.18 7.10
z 17 2.61 1.78
...
..
.
我正在尝试添加一个True
/False
列,其条件如下:
找到基本行(应该10
在索引中),x 10
并找到 if x 11
's val 1
and val 2
is >=
then x 10
's val 1
and val 2
。查找 ifz 17
和is val 1
,因此所需的如下所示:val 2
>=
z 10
val 1
val 2
df
Val1 Val2 Result
x 10 1.05 2.01 False
x 14 2.98 5.98 True
x 16 1.07 1.02 False
y 10 0.02 0.07 False
y 11 0.01 0.01 False
z 10 2.11 1.17 False
z 12 0.08 0.08 False
z 13 3.18 1.17 True
z 17 2.61 1.78 True
...
..
.
基行的结果应始终为 false
好吧,我开始如下:
df["Result"] = np.repeat(False, len(df))
for i in range(0, len(df)):
if df[index][i].str.contains("10") == True:
base = df[index][i][0]
for base in df[index]:
if base[i+1]["val1"] > base[i]["val1"] and base[i+1]["val2"] > base[i]["val2"]:
df["Result"][i] = True
else:
df["Result"][i] = False
但不能让它工作,可能是什么问题?
解决方案
.groupby().first()
您可以使用并根据此答案找到基本值,您可以找到原始.join()
df:
df = pd.DataFrame({'Val1': [1.05, 2.98, 1.01, 0.02, 0.01, 2.11, 0.08, 3.18, 2.61], 'Val2': [2.01, 5.98, 1.02, 0.07, 0.01, 1.17, 0.08, 7.10, 1.78]}, index=pd.MultiIndex.from_arrays(arrays=[['x', 'x', 'x', 'y', 'y', 'z', 'z', 'z', 'z'], [10, 14, 16, 10, 11, 10, 12, 13, 17]], names=['letters', 'numbers']))
df = df.join(df.groupby(level=0).first(), rsuffix='_base')
df['Result'] = (df.Val1 >= df.Val1_base) & (df.Val2 >= df.Val2_base)
df.loc[df.index.get_level_values('numbers')==10, 'Result'] = False
输出:
>>> df
Val1 Val2 Val1_base Val2_base Result
letters numbers
x 10 1.05 2.01 1.05 2.01 False
14 2.98 5.98 1.05 2.01 True
16 1.01 1.02 1.05 2.01 False
y 10 0.02 0.07 0.02 0.07 False
11 0.01 0.01 0.02 0.07 False
z 10 2.11 1.17 2.11 1.17 False
12 0.08 0.08 2.11 1.17 False
13 3.18 7.10 2.11 1.17 True
17 2.61 1.78 2.11 1.17 True
推荐阅读
- laravel - 如何将 nanoid 包从 npm 导入 Laravel?
- html - 具有最大列数的 CSS Grid 具有动态子项
- node.js - 打字稿覆盖 .env 文件设置
- ruby-on-rails - 无法将未经许可的参数转换为哈希
- node.js - api 调用受到另一个 api 调用验证的影响
- http - okhttp 发送错误 HTTP 消息,多个请求标头?
- python - 如何在python中将XML文件转换为PDF
- scala - scala spark job在失败时给出了奇怪的异常
- android - Android中RecyclerView的Textview AutoSizing
- tableau-api - Tableau 动态地图标签