我有几个'过去'和'现在'变量,我想执行一个简单的百分比变化' 行 '.例如:((exports_now - exports_past)/exports_past)).
这两个问题实现了这一点,但是当我尝试类似的方法时,我得到一个错误,我的函数增量获得了一个未知参数axis.
exports_ past exports_ now imports_ past imports_ now ect.(6 other pairs)
.23 .45 .43 .22 1.23
.13 .21 .47 .32 .23
0 0 .41 .42 .93
.23 .66 .43 .22 .21
0 .12 .47 .21 1.23
Run Code Online (Sandbox Code Playgroud)
在第一个问题的答案之后,
def deltas(row):
'''
simple pct change
'''
if int(row[0]) == 0 and int(row[1]) == 0:
return 0
elif int(row[0]) == 0:
return np.nan
else:
return ((row[1] - row[0])/row[0]) …Run Code Online (Sandbox Code Playgroud) 我正在努力清楚地理解 Pandas 中“元素”的概念。已经浏览了Pandas 的文档并进行了谷歌搜索,我猜这是某种行?当人们说“按元素应用函数”时,他们的意思是什么?当我阅读这篇文章时出现了这个问题:How to apply a function totwo columns of Pandas dataframe
我有这样的数据帧:
match_id inn1 bat bowl runs1 inn2 runs2 is_score_chased
1 1 KKR RCB 222 2 82 1
2 1 CSK KXIP 240 2 207 1
8 1 CSK MI 208 2 202 1
9 1 DC RR 214 2 217 1
33 1 KKR DC 204 2 181 1
Run Code Online (Sandbox Code Playgroud)
现在我想通过比较runs1和runs2中的值来更改is_score_chased列中的值.如果runs1> runs2,则行中的相应值应为"yes",否则应为no.我尝试了以下代码:
for i in (high_scores1):
if(high_scores1['runs1']>=high_scores1['runs2']):
high_scores1['is_score_chased']='yes'
else:
high_scores1['is_score_chased']='no'
Run Code Online (Sandbox Code Playgroud)
但它没有用.如何更改列中的值?
假设这是我的功能:
def function(x):
return x.str.lower()
Run Code Online (Sandbox Code Playgroud)
这是我的 DataFrame (df)
A B C D
0 1.67430 BAR 0.34380 FOO
1 2.16323 FOO -2.04643 BAR
2 0.19911 BAR -0.45805 FOO
3 0.91864 BAR -0.00718 BAR
4 1.33683 FOO 0.53429 FOO
5 0.97684 BAR -0.77363 BAR
Run Code Online (Sandbox Code Playgroud)
我想将该函数仅应用于列B和D. (将它应用于完整的 DataFrame 不是答案,因为它会在数字列中产生 NaN 值)。
这是我的基本想法: df.apply(function, axis=1)
但我无法理解如何选择不同的列来应用该函数。我已经尝试过按数字位置、名称等进行索引的所有方式。
我花了很多时间来阅读这个。这不是以下任何一项的直接副本:
我有这个数据框
Col1 Col2
0 A (1000 EUR) C ( 3000 USD)
1 B (2000 CHF) D ( 4000 GBP)
Run Code Online (Sandbox Code Playgroud)
我想将其转换为
Col1 Col2
0 1000 3000
1 2000 4000
Run Code Online (Sandbox Code Playgroud)
我知道如何为 1 列创建数据框(带索引),但不知道如何为多列创建数据框
这段代码产生这个结果
Col1
0 1000
1 2000
a = z['Col1'].str.split('(').str[-1].str.split().str[0].apply(pd.to_numeric,errors='coerce')
Run Code Online (Sandbox Code Playgroud)
如何修改上面的代码以添加 col2 (理想情况下使用矢量化而不是迭代)(所以理想情况下我不想为每一列输入相同的代码)
所以我有以下代码读取 5 列,日期 ohlc。然后它创建一个列“dow”来保存星期几。到现在为止还挺好:
import numpy as np
import pandas as pd
df = pd.read_csv('/content/drive/MyDrive/Forex/EURUSD-2018_12_18-2020_11_01.csv',parse_dates=True,names = ['date','1','2','3','4',])
df['date'] = pd.to_datetime(df['date'])
df.index = df['date']
df['dow'] = df['date'].dt.dayofweek
#df['downum'] = df.apply(lambda x: downu(x['date']))
df
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
date 1 2 3 4 dow
date
2018-12-18 00:00:00 2018-12-18 00:00:00 1.13498 1.13497 1.13508 1.13494 1
2018-12-18 00:01:00 2018-12-18 00:01:00 1.13497 1.13500 1.13500 1.13496 1
2018-12-18 00:02:00 2018-12-18 00:02:00 1.13500 1.13498 1.13502 1.13495 1
2018-12-18 00:03:00 2018-12-18 00:03:00 1.13498 1.13513 1.13513 1.13498 1
2018-12-18 00:04:00 2018-12-18 00:04:00 …Run Code Online (Sandbox Code Playgroud) 我有以下 Pandas 数据框:
| 店铺 | 物品 | 价格 | 开始日期有效 | 有效结束日期 |
|---|---|---|---|---|
| 店铺1 | 项目1 | 100.00 | 2019-01-01 | 2019-01-06 |
| 店铺1 | 项目1 | 120.00 | 2019-01-07 | 2019-01-10 |
| 店铺1 | 项目2 | 80.00 | 2018-12-31 | 2019-01-03 |
| 店铺1 | 项目2 | 150.00 | 2019-01-04 | 2019-01-06 |
| 商店2 | 项目1 | 105.00 | 2019-01-01 | 2019-01-06 |
| 商店2 | 项目1 | 130.00 | 2019-01-07 | 2019-01-10 |
| 商店2 | 项目2 | 85.00 | 2018-12-31 | 2019-01-03 |
| 商店2 | 项目2 | 145.00 | 2019-01-04 | 2019-01-06 |
我需要得到下表作为输出:
| 店铺 | 物品 | 日期 | 价格 |
|---|---|---|---|
| 店铺1 | 项目1 | 2019-01-01 | 100.00 |
| 店铺1 | 项目1 | 2019-01-02 | 100.00 |
| 店铺1 | 项目1 | 2019-01-03 | 100.00 |
| 店铺1 | 项目1 | 2019-01-04 | 100.00 |
| 店铺1 | 项目1 | 2019-01-05 | 100.00 |
| 店铺1 | 项目1 | 2019-01-06 | 100.00 |
| 店铺1 | 项目1 | 2019-01-07 … |
我有一个带有列Longitude和的pandas数据框Latitude.我想X和Y他们相处.utm调用from_latlon中有一个函数可以执行此操作.它接收Latitude和Longitude并给出[X,Y].这是我做的:
def get_X(row):
return utm.from_latlon(row['Latitude'], row['Longitude'])[0]
def get_Y(row):
return utm.from_latlon(row['Latitude'], row['Longitude'])[1]
df['X'] = df.apply(get_X, axis=1)
df['Y'] = df.apply(get_Y, axis=1)
Run Code Online (Sandbox Code Playgroud)
我想定义一个函数get_XY并from_latlon只应用一次来节省时间.我看了一下这里,这里和这里,但我找不到用一个apply函数制作两列的方法.谢谢.