如何同时判断a和b是否在c中 python_如何获取A,B重复列中,第一个不为空C的值?...

老铁, 以下代码仅供参考:

我举个例子吧

先建立df

>>> df = [[1,2,''], [1,3,4], [1,2,3], [1,3,3], [1,2,4],[1,4,5], [1,4,6]]

>>> df = pd.DataFrame(a, columns=['A','B','C'])

>>> df

A B C

0 1 2

1 1 3 4

2 1 2 3

3 1 3 3

4 1 2 4

5 1 4 5

6 1 4 6

可以使用df.groupby()方法分组, 而其返回的值是可迭代对象, 该可迭代对象的每一个值是一个元组, 而每一个元组又有两个元素, 第一个元素是你的分组依据, 第二个元素是被你分割出来的DataFrame, 看个例子吧:

>>> for i in df.groupby(by=['A','B'],sort=False):

print(i)

print() # 打印个回车分割

((1, 2), A B C

0 1 2

2 1 2 3

4 1 2 4)

((1, 3), A B C

1 1 3 4

3 1 3 3)

((1, 4), A B C

5 1 4 5

6 1 4 6)

所以现在的问题是如何从每个元组的第二个元素中找到你要的第一个不为空C的值

应该比较简单吧, 再写个例子:

>>> b = pd.DataFrame([[1,2,''],[1,2,3], [1,2,4]], columns=['A','B','C'])

>>> print(b[b.C != ''].iloc[0])

A 1

B 2

C 3

Name: 1, dtype: object

所以一句话就可以写完:

>>> a.groupby(by=['A','B'],sort=False).apply(lambda x:x[x.C != ''].iloc[0]).reset_index(drop=True)

A B C

0 1 2 3

1 1 3 4

2 1 4 5

但是问题又来了, 一旦原DataFrame中有[1,9,'']这样一项, 即A,B, 只出现一次没有重复过, 那就会报错

所以推荐自己写一个函数(就是传入apply()的那个)

给出参考:

def xx(x):

try:

return x[x.C != ''].iloc[0]

except:

return None

但是碰见[1,9,'']这一项就成了:

A B C

A B

1 2 1.0 2.0 3.0

9 NaN NaN NaN

3 1.0 3.0 4.0

4 1.0 4.0 5.0

所以你还得手动删除那一行

行吧, 老铁希望你写的更简单一点, 当然如果数据够理想, 一行就够了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值