在尝试获取NumPy矩阵之外的值时,是否可以接收指定值(例如0)?
例如:
#getItem - some method which do what i want
a = numpy.array([[1, 2], [3, 4]])
getItem(a, 1, 1) # == 4
getItem(a, -1, 1) # == 0
Run Code Online (Sandbox Code Playgroud)
当然我可以手工完成,但在Python中这些方法可能会有不好的表现.
我想在pandas DataFrame中找到2列int类型之间的区别.我正在使用python 2.7.栏目如下 -
>>> df
INVOICED_QUANTITY QUANTITY_SHIPPED
0 15 NaN
1 20 NaN
2 7 NaN
3 7 NaN
4 7 NaN
Run Code Online (Sandbox Code Playgroud)
现在,我想从INVOICED_QUANTITY中减去QUANTITY_SHIPPED并执行以下操作 -
>>> df['Diff'] = df['QUANTITY_INVOICED'] - df['SHIPPED_QUANTITY']
>>> df
QUANTITY_INVOICED SHIPPED_QUANTITY Diff
0 15 NaN NaN
1 20 NaN NaN
2 7 NaN NaN
3 7 NaN NaN
4 7 NaN NaN
Run Code Online (Sandbox Code Playgroud)
我该如何照顾NaN?我希望得到以下结果,因为我希望NaN被视为0(零) -
>>> df
QUANTITY_INVOICED SHIPPED_QUANTITY Diff
0 15 NaN 15
1 20 NaN 20
2 7 NaN 7
3 7 NaN 7
4 …
Run Code Online (Sandbox Code Playgroud) 如果你像这样比较两个字符串有什么问题:
>>> "1111">'19'
False
>>> "1111"<'19'
True
Run Code Online (Sandbox Code Playgroud)
为什么'1111'小于'19'?
例如,如果A = 864927518
,B = 1462579282
,M = 193773611
,如何计算(A^B)%M
?
有一个简单的方法吗?
我有一个pandas DataFrame(名为"df1")具有以下结构(虽然我有很多个月的日常数据):
date WeightedReturn
0 15/07/2015 0.005128
1 15/07/2015 0.002844
2 15/07/2015 0.003055
3 15/07/2015 -0.001481
4 15/07/2015 -0.000741
5 15/07/2015 -0.000741
6 16/07/2015 -0.004253
7 16/07/2015 -0.001712
8 16/07/2015 -0.001712
9 21/07/2015 -0.000178
10 21/07/2015 -0.000089
11 21/07/2015 -0.00008
Run Code Online (Sandbox Code Playgroud)
我希望从中创建一个新的DataFrame,它充当数据透视表并合并日期字段并对该特定日期的加权回报求和,得到如下内容:
date WeightedReturn
0 15/07/2015 0.00806425
1 16/07/2015 -0.007676
2 21/07/2015 -0.000356
Run Code Online (Sandbox Code Playgroud)
我尝试过使用"groupby函数":
df2 = df1.groupby('date').sum()
Run Code Online (Sandbox Code Playgroud)
这种(有点)工作,但输出然后错误地排序日期,如下所示:
WeightedReturn
date
01/09/2015 0.004803
02/09/2015 0.005144
03/08/2015 -0.000120
03/09/2015 -0.025164
04/08/2015 0.003956
04/09/2015 0.008942
05/08/2015 -0.01323
Run Code Online (Sandbox Code Playgroud)
你可以看到的不是按时间顺序排列的.
所以我尝试使用数据透视表功能,但是阅读有关它使用的文档时我感到非常困惑.
我试过了:
df2 = pandas.pivot_table(df1, values="Weighted …
Run Code Online (Sandbox Code Playgroud) 我有一个超过33,000行的数据帧,我想简化:
Crime type
GeographyCode
E01006687 Burglary
E01007229 Anti-social behaviour
E01007229 Anti-social behaviour
E01007229 Anti-social behaviour
E01007229 Burglary
E01007229 Other theft
E01007229 Other theft
E01007229 Shoplifting
E01007229 Theft from the person
E01007230 Anti-social behaviour
E01007230 Anti-social behaviour
E01007230 Anti-social behaviour
E01007230 Anti-social behaviour
E01007230 Anti-social behaviour
E01007230 Anti-social behaviour
...
Run Code Online (Sandbox Code Playgroud)
"GeographyCode"有207个唯一值,"犯罪类型"有12个唯一值.
我想创建一个包含207行和12列以及"GeographyCode"索引列的新数据框,每列代表一种犯罪类型,并包含GeographyCode中该犯罪类型的所有出现次数.
像这样的东西:
Burglary Anti-social Theft Shoplifting etc...
GeographyCode
E01006687 1 3 9 5 ...
E01007229 1 3 2 1 ...
E01007230 0 6 12 5 ...
...
Run Code Online (Sandbox Code Playgroud)
我尝试过一些东西,但由于没有数值,我发现很难得到我需要的东西.
所以我有一个二维数组,当使用第二列排序时,它a[np.argsort(-a[:,1])]
看起来像这样:
array([[ 30. , 98.7804878 ],
[ 24. , 98.7804878 ],
[ 21. , 98.7804878 ],
[ 26. , 98.7804878 ],
[ 20. , 98.70875179],
[ 4. , 98.27833572],
[ 1. , 7.10186514]])
Run Code Online (Sandbox Code Playgroud)
现在我想按最低的“id”列对它进行排序,所以它看起来像这样:
array([[ 21. , 98.7804878 ],
[ 24. , 98.7804878 ],
[ 26. , 98.7804878 ],
[ 30. , 98.7804878 ],
[ 20. , 98.70875179],
[ 4. , 98.27833572],
[ 1. , 7.10186514]])
Run Code Online (Sandbox Code Playgroud)
我不知道怎么做,即使我从第一个中获取最高的百分比然后订购它们。
我认为最好用一个例子来说明这一点。我想做的是从组中找到非空数字并将其传播到组的其余部分。
In [52]: df = pd.DataFrame.from_dict({1:{'i_id': 2, 'i_num':1}, 2: {'i_id': 2, 'i_num': np.nan}, 3: {'i_id': 2, 'i_num': np.nan}, 4: {'i_id': 3, 'i_num': np.nan}, 5: {'i_id': 3, 'i_num': 5}}, orient='index')
In [53]: df
Out[53]:
i_num i_id
1 1 2
2 NaN 2
3 NaN 2
4 NaN 3
5 5 3
Run Code Online (Sandbox Code Playgroud)
DataFrame 看起来像这样。我想要的是获取所有 i_id == 2 并使它们的 i_num == 1,以及所有 i_id == 3,并使它们的 i_num == 5 (因此两者都匹配它们的非空组邻居)。
所以最终的结果是这样的:
i_num i_id
1 1 2
2 1 2
3 1 2
4 5 …
Run Code Online (Sandbox Code Playgroud) 我正在构建一些数据的单元测试,并且在编写pythonic数据检查时遇到了麻烦.
我有一只熊猫DataFrame
:
d = {'one' : pd.Series([.14, .52, 1.], index=['a', 'b', 'c']),
'two' : pd.Series([.57, .25, .33, .98], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)
现在,我想验证这些列的数据是否在[0,1]范围内.我想要一个功能:
check_data(df, column)
Run Code Online (Sandbox Code Playgroud)
True
如果数据确实落在范围内,False
如果没有,则返回.所以在我的示例数据中,check_data(df, 'one')
返回False
,check_data(df, 'two')
返回True
.
我的脑袋正试图逐行接受(感谢我多年的Excel VBA),但我知道这是错的.谁有更好的方法?
我一直在寻找其他SO帖子,以便创建一个程序,根据某些参数生成一个组合列表(字母+数字),我已经得到了这样的结果:
from itertools import product
from string import *
keywords = [''.join(i) for i in product(ascii_letters + digits, repeat = 3)]
file = open("file.txt", "w")
for item in keywords:
file.write("%s\n" % item)
file.close()
Run Code Online (Sandbox Code Playgroud)
如果repeat参数保持在3/4,这个程序工作正常,但如果提高到5或更高,那么程序没有完成 - 它不会崩溃,似乎永远不会完成.我猜这是一个性能问题,但我不确定.如果有人能提供更有效的计划,那将是非常感激的.
其次,我希望程序输出:
使用此当前代码,它将仅输出第一个.
python ×10
dataframe ×5
pandas ×5
nan ×2
numpy ×2
algorithm ×1
arrays ×1
file-io ×1
indexing ×1
math ×1
matrix ×1
performance ×1
pivot-table ×1
python-2.7 ×1
python-3.x ×1
sorting ×1
string ×1
subtraction ×1