我面临Python/Pandas的性能问题。我有一个for循环,比较Pandas DataFrame中的后续行:
for i in range(1, N):
if df.column_A.iloc[i] == df.column_A.iloc[i-1]:
if df.column_B.iloc[i] == 'START' and df.column_B.iloc[i-1] == 'STOP':
df.time.iloc[i] = df.time.iloc[i] - df.time.iloc[i-1]
工作正常,但速
我正在使用Pandas / Python中的DataFrame,每一行都有一个ID (这不是唯一的),我想修改dataframe,为每一行添加一个具有多个匹配ID的列。
Starting with:
ID Name Rate
0 1 A 65.5
1 2 B 67.3
2 2 C 78.8
3 3 D 65.0
4 4 E 45.3
5 5 F 52.0
6 5 G 66.0
7 6 H 34.0
8 7 I 2.0
Trying to get to:
ID Nam
我试图加速一些用来计算熊猫时间延迟、索引数据格式的代码。dataframe包含由ID列标识的200 k时态序列。我试过达斯克,但没有得到任何改善(比熊猫本身花费的时间更长)。
下面是一个可以生成具有可比较大小的虚拟数据的示例:
import itertools as it
import numpy as np
import pandas as pd
np.random.seed(1)
#Series for ID
ID_data = pd.Series(np.arange(0,200000), name='ID')
#Array of data - create panda
在Pandas中有没有一些聪明的或者Pythonic式的方法来做下面这样的事情呢?
for index, row in pd.DataFrame().iterrows():
if (row[previous_index]>=row and row[next_index]>=row):
row=(row[previous_index]+row[next_index])/2
我有一个,如果上一行的实验室值有一个字符'E',我想将' lab‘值更改为字符B,除了最后一行'lab’是E
for i, row in df.iterrows():
if i == len(df) - 1:
pass
elif df['lab'].iloc[i] == 'E':
df['lab'].iloc[i] = 'B'
我编写了以下代码,但运行需要很长时间,并得到以下错误:
/usr/local/lib/python3.6/dist-packages/pandas/c
我正在尝试完善最严格的pythonic方法来定义一个dataframe列,例如每一行都等于它自己乘以上一行值: rowi = rowi * row
import pandas as pd
list = [1,2,3]
df = pd.DataFrame()
df['a'] = list
a
0 1
1 2
2 3
I am expecting the function to output:
a
0 1 (stays identical)
1 2 (2*1)
2 6 (3*2)
如果不使用iterrow(),这是可能的吗?
我的目标是在数据仓库中找到临时的最小值。要找到它们,我在dataframe中搜索的值低于前面3个值中的最小值。在Google和python3.9中进行了windows测试。
也许还有其他更疯狂的方法来做这件事。
问题是:当使用<=时,一切看起来都很好,但是当使用<时,什么都没有发现。即使提供的数据应该匹配。
import pandas as pd
data_list = [55,66,77,88,99,88,77,66,55,54,65,67,68,70,73,78,83] # use any other values
low = pd.Series(data_list)
我想水平移动我的数据帧test_1的每一行,跟随来自另一个数据帧df_x的相应行中的值。df_x的每一行中的值应该定义向左移动的步数。 test_1 = pd.DataFrame([[1,2,3,4], [10,12,13,14], [20, 22, 23,24]]) df_x = pd.DataFrame([[1],[3],[2]]) 我的预期输出将是: Out[157]:
0 1 2 3
0 2 3 4 NA
1 14 NA NA NA
2 23 24 NA NA 我试着从一个类似的问题(how to shift columns in
我想找到当地的复制品,并给他们一个独特的身份,直接在熊猫。
现实生活示例:
时间订购的购买数据,客户身份发生多次(因为他每周去一家商店多次),但我想确定客户在同一时间清洗多个项目的场合。
我现在的方法如下所示:
def follow_ups(lst):
lst2 = [None] + lst[:-1]
i = 0
l = []
for e1, e2 in zip(lst, lst2):
if e1 != e2:
i += 1
l.append(i)
return l
follow_ups([
我正在尝试使用pandas将一个预定义函数(myfunc)应用到我的DataFrame中的一个新系列。该函数将检查旧列(对于每行)中的每个索引中的值是否大于前一列中的值,如果是,则返回1,如果不是,则返回0。
我还尝试过series.apply()函数,我得到的结果是:跨越新创建的列中的所有行。
def myfunc(x):
for i in range(0,86):
if x.iloc[i + 1] > x.iloc[i]:
yield 1
else:
yield 0
df2['Highe
如何在每次列更改其字符串值时标记数据帧中的行?
例如:
输入
ColumnA ColumnB
1 Blue
2 Blue
3 Red
4 Red
5 Yellow
# diff won't work here with strings.... only works in numerical values
dataframe['changed'] = dataframe['ColumnB'].diff()
Colum
虽然使用pandas滚动方法来应用标准公式很容易,但如果它涉及多列和有限的过去行,我发现很难。使用以下代码来更好地阐述: import numpy as np
import pandas as pd
#create dummy pandas
df=pd.DataFrame({'col1':np.arange(0,25),'col2':np.arange(100,125),'col3':np.nan})
def func1(shortdf):
#dummy formula
#use last row of col1 mult