【问题标题】:Data manipulation using pandas dataframe使用 pandas 数据框进行数据操作
【发布时间】:2018-05-04 15:59:44
【问题描述】:

我有 MxN numpy 数组数据。 它们在 csv 文件中,我正在使用 pandas 模块阅读。

sv-01   sv-02  SV-03  state-01 state-02 state-03    val-01   val-02  val-03
7        12     8         B          B         B     .23     0.34    1.03
7        12     8         B          B         A     .35     0.10    0
7        12     8         B          A         A     1.45    0       0
7        12     8         A          A         A      0      0       0
7        12     8         A          B         B      0      1.23    3.21

... ... ... ... ... ... .. .. ... ....

为了我的计算目的,我需要两个变量。如果状态为 A,则在每一行中 则不考虑相应的卫星。所以第一行的总SV 是 3。对于其他行,同样是 2,1,0,1。另一个变量是计数。 如果任何一行没有单个 B ,则该行将不被计算在内。 最后一行将被视为 2,因为存在两个 B。

 #So my expected output is 
 #Total count is 4
 #and number of satellites used is 3,2,1,0,1 in each row or iteration

如何迭代我的数据。

谢谢

【问题讨论】:

  • 最后一行应该算2吗?你在计算状态列中的 B 数吗?

标签: arrays python-2.7 pandas numpy


【解决方案1】:

首先filter 并将所有数据与A 进行比较,将Trues 相加,最后将B 减去rsub

a = df.filter(like='state').eq('A').sum(axis=1).rsub(3)
#same as
#a = 3 - (df.filter(like='state') == 'A').sum(axis=1)
print (a)
0    3
1    2
2    1
3    0
4    2
dtype: int64

详情:

print (df.filter(like='state'))
  state-01 state-02 state-03
0        B        B        B
1        B        B        A
2        B        A        A
3        A        A        A
4        A        B        B

print (df.filter(like='state').eq('A'))
   state-01  state-02  state-03
0     False     False     False
1     False     False      True
2     False      True      True
3      True      True      True
4      True     False     False

要计算所有非A 行,请使用any 至少检查一个Truesum

b = df.filter(like='state').eq('A').any(1).sum()
print (b)
4

print (df.filter(like='state').eq('A').any(1))
0    False
1     True
2     True
3     True
4     True
dtype: bool

大家一起:

mask = df.filter(like='state').eq('A')
a = mask.sum(axis=1).rsub(3)
print (a)
0    3
1    2
2    1
3    0
4    2
dtype: int64

b = mask.any(1).sum()
print (b)
4

【讨论】:

  • @jezrael 我有两个疑问.1。什么是'喜欢'。 2. 以及如何计算总数。这里是4,因为第4行没有B。
  • like 表示检查列 nmaes 以查找 state。并用于比较数字然后计数df.filter(like='state').eq(100).sum(1)
  • 我为b添加解决方案
  • @Jezrael。谢谢 。我将逐步完成您的解决方案
  • 很高兴能帮上忙!美好的一天!
猜你喜欢
  • 2017-12-18
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多