我不明白为什么apply并transform在同一数据帧上调用时返回不同的dtypes.我之前解释这两个函数的方式是" apply折叠数据,transform完全相同apply但保留原始索引并且不会崩溃".考虑以下.
df = pd.DataFrame({'id': [1,1,1,2,2,2,2,3,3,4],
'cat': [1,1,0,0,1,0,0,0,0,1]})
Run Code Online (Sandbox Code Playgroud)
让我们识别那些id在cat列中具有非零条目的s .
>>> df.groupby('id')['cat'].apply(lambda x: (x == 1).any())
id
1 True
2 True
3 False
4 True
Name: cat, dtype: bool
Run Code Online (Sandbox Code Playgroud)
大.但是,如果我们想创建一个指标列,我们可以执行以下操作.
>>> df.groupby('id')['cat'].transform(lambda x: (x == 1).any())
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 0
8 0
9 1
Name: cat, dtype: int64
Run Code Online (Sandbox Code Playgroud)
我不明白为什么dtype现在int64而不是any()函数返回的布尔值.
当我将原始数据框更改为包含一些布尔值时(注意零保持不变),转换方法会在object …
我有一个包含以下数据的数据框:
invoice_no dealer billing_change_previous_month date
110 1 0 2016-12-31
100 1 -41981 2017-01-30
5505 2 0 2017-01-30
5635 2 58730 2016-12-31
Run Code Online (Sandbox Code Playgroud)
我想只有一个拥有最长日期的经销商.所需的输出应该是这样的:
invoice_no dealer billing_change_previous_month date
100 1 -41981 2017-01-30
5505 2 0 2017-01-30
Run Code Online (Sandbox Code Playgroud)
每个经销商应该与最大日期不同,提前感谢您的帮助.
我有一个由两列组成的数据框,Age和Salary
Age Salary
21 25000
22 30000
22 Fresher
23 2,50,000
24 25 LPA
35 400000
45 10,00,000
Run Code Online (Sandbox Code Playgroud)
如何处理Salary列中的异常值并用整数替换它们?
我正在研究3SUM问题(来自leetcode),该问题将一个列表作为输入,并在列表中找到所有唯一的三元组,使得a + b + c = 0。我不太确定我的代码在做什么错,但是当前它为此列表返回一个空列表[-1,0,1,2,-1,-4],因此它无法识别任何总计为0的三元组我将不胜感激任何建议或改进的代码。
这是我的代码:
result = []
nums.sort()
l = 0
r=len(nums)-1
for i in range(len(nums)-2):
while (l < r):
sum = nums[i] + nums[l] + nums[r]
if (sum < 0):
l = l + 1
if (sum > 0):
r = r - 1
if (sum == 0):
result.append([nums[i],nums[l],nums[r]])
print(result)
Run Code Online (Sandbox Code Playgroud)