如果考虑到计算时间,内存和功耗(英特尔酷睿i7-6700HQ,8 GB Ram),我会得到一个更强大的问题解决方案,那将会很棒
这是样本数据,
import pandas as pd
df1 = pd.DataFrame({'time': [35427889701, 35427909854, 35427929709,35427949712, 35428009860],
'velocity_x':[12.5451, 12.5401,12.5351,12.5401,12.5251],
'yaw' : [-0.0787806, -0.0784749, -0.0794889,-0.0795915,-0.0795472]})
df2 = pd.DataFrame({'time': [35427929709, 35427949712, 35427009860,35427029728, 35427049705],
'velocity':[12.6583, 12.6556,12.6556,12.6556,12.6444],
'yawrate' : [-0.0750492, -0.0750492, -0.074351,-0.074351,-0.074351]})
df3 = pd.DataFrame(columns=['time','velocity_x','yaw','velocity','yawrate'])
Run Code Online (Sandbox Code Playgroud)
for index, row in df1.iterrows():
min=100000
for indexer, rows in df2.iterrows():
if abs(float(row['time'])-float(rows['time']))<min:
min = abs(float(row['time'])-float(rows['time']))
#storing the position
pos = indexer
df3.loc[index,'time'] = df1['time'][pos]
df3.loc[index,'velocity_x'] = df1['velocity_x'][pos]
df3.loc[index,'yaw'] …Run Code Online (Sandbox Code Playgroud) 我有一个包含许多列的数据框。我正在尝试过滤其中一列(“区域”)并根据“区域”列中的这 4 个区域中的每一个创建一个单独的数据框。然后在这 4 个单独的数据帧中的每一个上运行包含大量计算的大代码块,而不必单独重写大代码块 4 次。
我知道我可以使用 .isin 函数进行列过滤,并为我的 4 个地区(美国、新兴市场、欧洲、亚洲)执行此操作:
US = df[df['Region'].isin('US')]
EM = df[df['Region'].isin('EM')]
Europe = df[df['Region'].isin('Europe')]
Asia = df[df['Region'].isin('Asia')]
Run Code Online (Sandbox Code Playgroud)
然后在 4 个新数据帧上运行我的代码块。但是我会分别执行我的大块计算代码 4 次,这太混乱了。我怎样才能在循环中做到这一点,所以我只需要一次编写我的大代码块?如果除了 for 循环之外,我还可以使用另一个函数来执行此操作,这也很棒。感谢任何帮助 - 尝试学习。
虚拟代码:
df = pd.DataFrame({'a':[1,2,3,4,5,6], 'b':['cats','dogs','birds','pianos','elephant','dinos'], 'Region' : ['EM', 'US', 'US', 'Europe', 'Asia', 'Asia']})
Run Code Online (Sandbox Code Playgroud) 我有以下数据框
A B C D E F
Algo T
X 1 0.2 0.2 0.0 0.0 0.2 0.2
2 0.0 0.0 0.0 0.0 0.0 0.0
Y 15 0.7 1.4 1.5 1.0 0.7 1.4
30 0.5 0.3 1.0 0.4 0.5 0.4
45 0.2 0.0 0.6 0.0 0.2 0.0
Z 30 1.8 2.3 0.6 0.7 1.8 2.3
60 1.0 0.5 0.3 0.4 1.0 0.5
90 0.3 0.2 0.0 0.2 0.4 0.2
Run Code Online (Sandbox Code Playgroud)
我想知道如何在底部有一行显示 A、B、C、... F 列的平均值
A B C D E F
Algo T …Run Code Online (Sandbox Code Playgroud) 我有熊猫df['realize']
time realize
2016-01-18 08:25:00 -46.369083
2016-01-19 14:30:00 -819.010738
2016-01-20 11:10:00 -424.955847
2016-01-21 07:15:00 27.523859
2016-01-21 16:10:00 898.522762
2016-01-25 00:00:00 761.063545
Run Code Online (Sandbox Code Playgroud)
哪里time:
df.index = df['time']
df.index = pd.to_datetime(df.index)
Run Code Online (Sandbox Code Playgroud)
哪里df['realize']:
In: type(df['realize'])
Out: pandas.core.series.Series
Run Code Online (Sandbox Code Playgroud)
我想计算连续值,规则很简单 ( df['realize'] > 0, df['realize'] < 0)
预计输出:
time realize Consecutive
2016-01-18 08:25:00 -46.369083 1
2016-01-19 14:30:00 -819.010738 2
2016-01-20 11:10:00 -424.955847 3
2016-01-21 07:15:00 27.523859 1
2016-01-21 16:10:00 898.522762 2
2016-01-25 00:00:00 761.063545 3
Run Code Online (Sandbox Code Playgroud)
我阅读了有关循环的主题,但没有找到我需要的内容。预先感谢您的帮助。
我编写了以下代码,以便在年末的某一天开始该年的支付期。出于某种原因,它告诉我 12 月 22 日(第一年)是星期六。在线日历告诉我那是在星期四。
from datetime import datetime, timedelta
def pp_firstday(year):
print(type(year))
firstday = datetime(1,12,22,0,0,0)
yr = 2
print(yr, " ", firstday.strftime("%b/%d/%Y %a"))
yr = 3
while int(firstday.strftime("%Y")) != year-1:
firstday += timedelta(weeks=52)
if int(firstday.strftime("%m")) <= 12 and int(firstday.strftime("%d")) <= 12:
firstday += timedelta(weeks=2)
print("27: ",firstday.strftime("%b/%d/%Y %a"))
print(yr, " ",firstday.strftime("%b/%d/%Y %a"))
yr += 1
return firstday
year = int(input("Year >>>")) result=pp_firstday(year) print(result.strftime("%b/%d/%Y %a"))
Run Code Online (Sandbox Code Playgroud)
问题是,当你运行它时,输出显示: 2 Dec/22/0001 Sat Python 认为 12 月 22 日,第 1 年是星期六。到 2019 年时,输出显示:2020 Dec/21/2019 Sat,因此问题已得到纠正。是什么赋予了?
是否可以使用以下方法复制以下内容 pd.merge
a = pd.DataFrame(dict(x=[1,2], y=[5,5]))
b = pd.DataFrame(dict(x=[7,7], y=[12,13]))
pd.concat([a,b],axis=1)
Run Code Online (Sandbox Code Playgroud)
哪个输出
x y x y
0 1 5 7 12
1 2 5 7 13
Run Code Online (Sandbox Code Playgroud)
因为这将使我能够为列名添加后缀。
我希望以下内容起作用:
pd.merge(a, b, how = 'outer',)
Run Code Online (Sandbox Code Playgroud)
但这会返回:
x y
0 1 5
1 2 5
2 7 12
3 7 13
Run Code Online (Sandbox Code Playgroud)
我希望输出是:
x_l y_l x_r y_r
0 1 5 7 12
1 2 5 7 13
Run Code Online (Sandbox Code Playgroud) 鉴于以下数据:
pd.DataFrame(dict(
name = ['a', 'a', 'a', 'b', 'b', 'b'],
vals = [1, 2 , 3, 99, 3, 4]
))
Run Code Online (Sandbox Code Playgroud)
看起来像:
name vals
0 a 1
1 a 2
2 a 3
3 b 99
4 b 3
5 b 4
Run Code Online (Sandbox Code Playgroud)
我想知道如何创建以下内容:
1 2 3 4 99
a true true true false false
b false false true false true
Run Code Online (Sandbox Code Playgroud)
注意 -上面的true和的确切值false并不那么重要,我目前不知道如何创建这种类型的表。
我有包含 3 列的 DataFrame:CustomerId、Amount 和 Status(成功或失败)。DataFrame 没有以任何方式排序。一个 CustomerId 可以在 DataFrame 中重复多次。
我想使用以下逻辑在此 DataFrame 中引入新列:
df[totalamount]= 状态为成功的每个客户的金额总和。
我已经有一个正在运行的代码,但是 df.iterrows 需要太多时间。因此请您提供替代方法,如熊猫矢量化或 numpy 矢量化。
例如,我想从前三列创建 'totalamount' 列:
CustomerID Amount Status totalamount
0 1 5 Success 105 # since both transatctions were successful
1 2 10 Failed 80 # since one transaction was successful
2 3 50 Success 50
3 1 100 Success 105
4 2 80 Success 80
5 4 60 Failed 0
Run Code Online (Sandbox Code Playgroud) 我有一个dataframe包含多个“堆栈”及其相应的“长度”。
df = pd.DataFrame({'stack-1-material': ['rock', 'paper', 'paper', 'scissors', 'rock'], 'stack-2-material': ['rock', 'paper', 'rock', 'paper', 'scissors'], 'stack-1-length': [3, 1, 1, 2, 3], 'stack-2-length': [3, 1, 3, 1, 2]})
stack-1-material stack-2-material stack-1-length stack-2-length
0 rock rock 3 3
1 paper paper 1 1
2 paper rock 1 3
3 scissors paper 2 1
4 rock scissors 3 2
Run Code Online (Sandbox Code Playgroud)
我试图为每种材料创建一个单独的列,跟踪长度的累积总和,而不管它们是哪个“堆栈”。我试过使用,groupby但只能将累积总和放入一列。这是我要找的:
stack-1-material stack-2-material stack-1-length stack-2-length rock_cumsum paper_cumsum scissors_cumsum
0 rock rock 3 3 6 0 0
1 paper paper 1 …Run Code Online (Sandbox Code Playgroud) 我知道如何使用带有填充或填充的groupby方法来估算缺少的值。但是我的问题是,我需要首先在“日期”列中找到与“得分”列中的空值最接近的日期,如果分数列中的值不为空,则用该值进行插补。如果该值为空,则需要搜索另一个最近的日期。我可以遍历行并执行此操作,但是速度非常慢。
这是数据的示例:
df = pd.DataFrame(
{'cn': [1, 1, 1, 1, 2, 2, 2],
'date': ['01/10/2017', '02/09/2016', '02/10/2016','01/20/2017', '05/15/2019', '02/10/2016', '02/10/2017'],
'score': [np.nan, np.nan, 6, 5, 4, np.nan, 8]})
cn date score
0 1 01/10/2017 NaN
1 1 02/09/2016 NaN
2 1 02/10/2016 6
3 1 01/20/2017 5
4 2 05/15/2019 4
5 2 02/10/2016 NaN
6 2 02/10/2017 8.0
Run Code Online (Sandbox Code Playgroud)
输出应该是
cn date score
0 1 01/10/2017 5
1 1 02/09/2016 6
2 1 02/10/2016 6
3 1 01/20/2017 5
4 …Run Code Online (Sandbox Code Playgroud) pandas ×9
python ×8
python-3.x ×3
dataframe ×2
algorithm ×1
crosstab ×1
data-science ×1
datetime ×1
for-loop ×1
join ×1
merge ×1
missing-data ×1
multi-index ×1