Python 选择特定列
我有一个科学家的数据框Python 选择特定列,python,pandas,selection,Python,Pandas,Selection,我有一个科学家的数据框 radius date spin atom 0 12,50 YYYY/MM 0 he 1 11,23 YYYY/MM 2 c 2 45,2 YYYY/MM 1 z 3 11,1 YYYY/MM 1 p 我想为每一行选择,半径差在下面的所有行,例如5 我定义了一个函数来计算simple,这是一个示例: def diff_
radius date spin atom
0 12,50 YYYY/MM 0 he
1 11,23 YYYY/MM 2 c
2 45,2 YYYY/MM 1 z
3 11,1 YYYY/MM 1 p
我想为每一行选择,半径差在下面的所有行,例如5
我定义了一个函数来计算simple,这是一个示例:
def diff_radius (a,b)
return a-b
每行是否可以找到一些行来检查调用外部函数时的条件
我尝试了一些方法,但不起作用:
for i in range(df.shape[0]):
....
df_in_radius=df.apply(lambda x : diff_radius(df[i]['radius'],x['radius']))
你能帮我吗?我假设radius列的数据类型是元组。您可以将diff_radius方法保留为
def diff_radius(x):
a, b = x
return a-b
然后,您可以使用pandas中的loc方法选择与半径差小于5的条件相匹配的行
df.loc[df.radius.apply(diff_radius) < 5]
我说错了
我的数据帧是:
radius of my atom date spin atom
0 12.50 YYYY/MM 0 he
1 11.23 YYYY/MM 2 c
2 45.2 YYYY/MM 1 z
3 11.1 YYYY/MM 1 p
我做一个循环,在一行上应用一个特殊的计算,计算每行的响应条件。
例如:
我真诚地感谢您的回答我想半径不是逗号而是点?您能精确地指出半径和“某物”之间的差异在5以下吗?对不起,我弄错了:df_in_radius=df.applylambda x:diff_radiudf[I]['radius',x['radius']<5我想为每一行构建一个具有相同列的数据框,其中loc[i]半径之间的差异小于5对不起,我有一个全局数据框。对于我想选择的每一行调用,在相同的数据框行中,与i半径之间的差异小于5。这种治疗是循环的。i从0到数据帧的长度不等。请用所有开始的假设修改您的问题,因为没有人理解……例如,我们必须猜测您有一个全局数据帧col radius不是元组。这是我的元素半径的值。对不起,我用逗号而不是点。@oxthon我已经更新了字符串的答案。请查收
radius of my atom date spin atom
0 12.50 YYYY/MM 0 he
1 11.23 YYYY/MM 2 c
2 45.2 YYYY/MM 1 z
3 11.1 YYYY/MM 1 p
def diff_radius(current_row,x):
current_row['radius']-x['radius']
return a-b
df=pd.read_csv(csvfile,delimiter=";",names=('radius','date','spin','atom'))
# for each row of original dataframe
for i in range(df.shape[0]):
# first build a new and tmp dataframe with row
# which have a radius less 5 than df.iloc[i]['radius] (level of loop)
df_tmp=df[diff_radius(df.iloc[i]['radius],df['radius']) <5]
....
# start of special calc, with the df_tmp which contains all of rows
# less 5 than the current row **(i)**