Python 数据帧部分和选定行之间按行划分
几天前我问了一个相关的问题(),但不想编辑它,因为尽管是相关的,但这是一项新任务 拥有此数据(): 我想做的是,将类型为“cow”的每一行除以类型为“cal”的行,但两者的值都相同。如果某个日期有多个Python 数据帧部分和选定行之间按行划分,python,pandas,division,Python,Pandas,Division,几天前我问了一个相关的问题(),但不想编辑它,因为尽管是相关的,但这是一项新任务 拥有此数据(): 我想做的是,将类型为“cow”的每一行除以类型为“cal”的行,但两者的值都相同。如果某个日期有多个“cal”行,则应选择id较高的行。 对于显示的数据,第1-4行应除以第0行,第8-12行应除以第7行。(id“188”后的列是数值的起始位置)。结果应该是: date type id ... 1096 1097 1098 1 2
“cal”
行,则应选择id较高的行。
对于显示的数据,第1-4行应除以第0行,第8-12行应除以第7行。(id“188”后的列是数值的起始位置)。结果应该是:
date type id ... 1096 1097 1098
1 2014-06-13 cow 32 ... 0.029161 -0.052579 -0.098348
2 2014-06-13 cow 47 ... 0.427644 0.401395 0.381012
3 2014-06-13 cow 107 ... 0.231857 0.187632 0.156420
4 2014-06-13 cow 137 ... 0.210654 0.157386 0.124890
8 2014-10-24 cow 32 ... 4.690497 3.551748 3.266325
9 2014-10-24 cow 47 ... 5.051105 3.791418 3.463104
10 2014-10-24 cow 105 ... 3.171835 2.479936 2.297804
11 2014-10-24 cow 107 ... 3.856876 2.937823 2.713763
12 2014-10-24 cow 137 ... 5.122165 3.883989 3.561786
我设法对唯一的日期进行迭代,然后过滤和提取“cal”行和“cow”行,将它们分开,并将每个结果附加到一个空数据框中。以下是我使用的函数:
def divide_cal_date(mydata):
cows = mydata[(mydata["type"] == "cow")]
div_cows = pd.DataFrame()
for i in mydata.date.unique():
curr_cal = mydata[(mydata["date"] == i) & (mydata["type"] == "cal")].tail(1).iloc[:,3:]
temp_cows = cows[(cows["date"] == i)].copy()
temp_cows.loc[:,3:] = cows[(cows["date"] == i)].iloc[:,3:].div(curr_cal.squeeze())
div_cows = div_cows.append(temp_cows)
print(i, end="\r")
print("end")
return div_cows
正如我在上一个问题中所说的,我只是从熊猫开始,所以我想知道是否有一种更干净、高效、直接的方法来做到这一点。目前,它正在发挥作用,但任何建议都值得赞赏。这对我来说已经足够好了,但请小心,
tail(1)
表示您的ID已排序。:)这对我来说已经足够好了,但要小心,尾部(1)
意味着您的ID已排序。:)
def divide_cal_date(mydata):
cows = mydata[(mydata["type"] == "cow")]
div_cows = pd.DataFrame()
for i in mydata.date.unique():
curr_cal = mydata[(mydata["date"] == i) & (mydata["type"] == "cal")].tail(1).iloc[:,3:]
temp_cows = cows[(cows["date"] == i)].copy()
temp_cows.loc[:,3:] = cows[(cows["date"] == i)].iloc[:,3:].div(curr_cal.squeeze())
div_cows = div_cows.append(temp_cows)
print(i, end="\r")
print("end")
return div_cows