【发布时间】:2022-01-06 17:22:48
【问题描述】:
我有一个数据框,你可以通过运行这段代码来获得它:
import numpy as np
import pandas as pd
from io import StringIO
df4s = """
LowerAge age 1 2 3 4
0 2 3 o.234 o.234 o.234 o.234
1 3 4 o.234 o.234 o.234 o.234
2 4 2 o.234 o.234 o.234 o.234
3 5 3 o.234 o.234 o.234 o.234
"""
df4 = pd.read_csv(StringIO(df4s.strip()), sep='\s+')
df4
输出是:
LowerAge age 1 2 3 4
0 2 3 o.234 o.234 o.234 o.234
1 3 4 o.234 o.234 o.234 o.234
2 4 2 o.234 o.234 o.234 o.234
3 5 3 o.234 o.234 o.234 o.234
现在的逻辑是这样的:对于每一行,如果LowerAge-1
第一行LowerAge-1等于1且小于age,则'1'列的值(因为LowerAge-1等于1)将等于1,
第二行LowerAge-1等于2且小于age,则'2'列的值为1。
最终的输出应该是:
LowerAge age '1' '2' '3' '4'
0 2 3 1 o.234 o.234 o.234
1 3 4 o.234 1 o.234 o.234
2 4 2 o.234 o.234 o.234 o.234
3 5 3 o.234 o.234 o.234 o.234
我的代码是:
lower_v=df4['LowerAge'].values - 1
df4[lower_v.astype(str)]=np.where(lower_v<df4['age'],1,df4[lower_v.astype(str)])
错误:
---> 19 df4[lower_v.astype(str)]=np.where(lower_v<df4['age'],1,df4[lower_v.astype(str)])
KeyError: "['1' '2' '3' '4'] not in index"
有朋友可以帮忙吗?
【问题讨论】:
-
如果您想逐行处理 pandas 数据帧,请使用
.iloc -
感谢您的回复,能否将您的回复作为答案发布,以便我查看?
-
至少在这个例子中,列标签是如此混乱,因为它们不仅仅是字符串
'1',还有带引号的字符串''1'',所以如果你需要要通过标签实际引用它们,您需要df["'1'"]
标签: python pandas dataframe numpy