我的数据集如下: -
2017-03-01 31.8 28.0 32.6
2017-04-01 31.6 28.0 32.6
2017-05-01 31.0 27.0 32.6
2017-06-01 31.0 27.0 32.4
2017-07-01 31.0 27.0 31.4
2017-08-01 30.0 27.0 32.6
除第一列外,其余列均为温度。我想要做的是比较第4列(从右边起)与其他列值的值,以找出温度值是否不大于或小于2度(第4列)。例如,我想计算所有三列(行方式)的值在30.6到34.6之间的次数。
pandas下是否有可用的功能?
答案 0 :(得分:2)
根据您的示例数据,您可以尝试:
df2[['t1','t2','t3']].apply(lambda x : abs(x-df2['t3'])<2).sum(axis=1)==3
Out[425]:
0 False
1 False
2 False
3 False
4 False
5 False
dtype: bool
数据输入
df2
Out[426]:
Time t1 t2 t3
0 2017-03-01 31.8 28 32.6
1 2017-04-01 31.6 28 32.6
2 2017-05-01 31.0 27 32.6
3 2017-06-01 31.0 27 32.4
4 2017-07-01 31.0 27 31.4
5 2017-08-01 30.0 27 32.6
答案 1 :(得分:2)
列a
b
的值小于c
In [726]: (df[['a', 'b']].sub(df['c'], axis=0).abs() < 2).all(1).sum()
Out[726]: 0
In [727]: (df[['a', 'b']].sub(df['c'], axis=0).abs() < 2)
Out[727]:
a b
0 True False
1 True False
2 True False
3 True False
4 True False
5 False False
值介于30.6至34.6之间
In [671]: (df[['a', 'b', 'c']] > 30.6) & (df[['a', 'b', 'c']] < 34.6)
Out[671]:
a b c
0 True False True
1 True False True
2 True False True
3 True False True
4 True False True
5 False False True
30.6到34.6之间的值,对于一行中的所有列都是True
In [672]: ((df[['a', 'b', 'c']] > 30.6) & (df[['a', 'b', 'c']] < 34.6)).all(1)
Out[672]:
0 False
1 False
2 False
3 False
4 False
5 False
dtype: bool
所有列的值在30.6到34.6之间的行数
In [673]: ((df[['a', 'b', 'c']] > 30.6) & (df[['a', 'b', 'c']] < 34.6)).all(1).sum()
Out[673]: 0
答案 2 :(得分:2)
如果我正确理解了您的问题,您想知道所有值的次数是否在第四列的范围±2之内(列的编号为0,1,2,3):
(((df[3] - df[1]).abs() < 2) & ((df[3] - df[2]).abs() < 2)).sum()
#0
答案 3 :(得分:1)
您可以使用dataframe.apply
对每行执行比较,并对比较结果求和。
import pandas
df = pandas.DataFrame(
data=[
[31.8, 28.0, 32.6],
[31.6, 28.0, 32.6],
[31.0, 27.0, 32.6],
[31.0, 27.0, 32.4],
[31.0, 27.0, 31.4],
[30.0, 27.0, 32.6]
],
index=['2017-03-01', '2017-04-01', '2017-05-01', '2017-06-01', '2017-07-01', '2017-08-01']
)
df['count'] = df.apply(lambda x: sum((x > 30.6) & (x < 34.6)), axis=1)
print(df)
从True == 1
和False == 0
开始,您将获得符合条件的列数