【发布时间】:2020-04-04 05:38:45
【问题描述】:
我在 pandas 中的条件列上问了一个类似的问题,但在处理一个新问题时有点卡住了。示例数据集如下:
Name Date Type Currency
0 John *2017-07-06 BTC USD
1 John *2017-07-06 Paypal USD
2 John *2017-07-06 Fastspring USD
3 John 2017-07-10 EU EUR
4 John 2017-07-10 PayPal USD
5 John 2017-07-10 PayPal USD
6 John *2017-07-12 BTC EUR
7 John *2017-07-12 Fastspring USD
8 Susan 2017-07-06 EU EUR - Dates Restart Again on Susan
9 Susan 2017-07-06 PayPal USD
10 Susan 2017-07-10 BTC USD
11 Susan 2017-07-12 PayPal USD
我正在尝试添加一个条件列,每个包含“BTC”的日期在名为“Covered”的新列中与匹配日期的行中产生一个“是”值,所需的输出如下:
Name Date Type Currency Covered
0 John *2017-07-06 BTC USD Yes*
1 John *2017-07-06 Paypal USD Yes*
2 John *2017-07-06 Fastspring USD Yes*
3 John 2017-07-10 EU EUR No
4 John 2017-07-10 PayPal USD No
5 John 2017-07-10 PayPal USD No
6 John *2017-07-12 BTC EUR Yes*
7 John *2017-07-12 Fastspring USD Yes*
8 Susan 2017-07-06 EU EUR No - Dates Restart Again on Susan
9 Susan 2017-07-06 PayPal USD No
10 Susan 2017-07-10 BTC USD Yes*
11 Susan 2017-07-12 PayPal USD No
我首先使用 groupby 和 isin 按日期分组: - 更新代码 - 感谢 @Quang Hoang 非常接近解决问题,只需要使用每个新名称进行重置。
df['Covered'] = np.where(df['Type'].eq('BTC')
.groupby(df['Date'])
.transform('any'),
'Yes', 'No')
但我仍然只为包含“BTC”的特定行生成值,而不是像我想要的输出一样,每组日期包含“BTC”值的所有行。
有什么建议吗?我在这里寻求任何可能需要的澄清,感谢所有可以提供帮助的人。
【问题讨论】:
标签: python-3.x pandas numpy conditional-statements pandas-groupby