[英]Change first value of group based on condition, pandas
假设我有以下数据集
table = [[datetime.datetime(2015, 3, 31), 1, 0.5, 1],
[datetime.datetime(2015, 6, 30), 1, 0.5, 0.5],
[datetime.datetime(2015, 9, 30), 1, 0.5, 0.5],
[datetime.datetime(2015, 12, 31), 1, 2, 0.5],
[datetime.datetime(2015, 3, 31), 2, 0.5, 1.5],
[datetime.datetime(2015, 6, 30), 2, 0.5, 0.5],
[datetime.datetime(2015, 9, 30), 2, 0.5, 0.5],
[datetime.datetime(2015, 12, 31), 2, 2, 0.5]]
df = pd.DataFrame(table, columns=['Date', 'Id', 'Value', 'Old'])
有没有什么办法的第一个元素更改Value
到的相应元素Old
如果的元素Value
比一个较小的Old
? 它需要由每个组完成(基于Id
)。 我的新桌子看起来像
Date Id Value Old
0 2015-03-31 1 1.0 1.0
1 2015-06-30 1 0.5 0.5
2 2015-09-30 1 0.5 0.5
3 2015-12-31 1 2.0 0.5
4 2015-03-31 2 1.5 1.5
5 2015-06-30 2 0.5 0.5
6 2015-09-30 2 0.5 0.5
7 2015-12-31 2 2.0 0.5
谢谢,丁吉斯
由于您只想更改每个组的第一个元素,因此可以执行自定义的groupby应用功能。
import pandas as pd
import datetime
# your data
# =================================================
table = [[datetime.datetime(2015, 3, 31), 1, 0.5, 1],
[datetime.datetime(2015, 6, 30), 1, 0.5, 0.5],
[datetime.datetime(2015, 9, 30), 1, 0.5, 0.5],
[datetime.datetime(2015, 12, 31), 1, 2, 0.5],
[datetime.datetime(2015, 3, 31), 2, 0.5, 1.5],
[datetime.datetime(2015, 6, 30), 2, 0.5, 0.5],
[datetime.datetime(2015, 9, 30), 2, 0.5, 0.5],
[datetime.datetime(2015, 12, 31), 2, 2, 0.5]]
df = pd.DataFrame(table, columns=['Date', 'Id', 'Value', 'Old'])
print(df)
Date Id Value Old
0 2015-03-31 1 0.5 1.0
1 2015-06-30 1 0.5 0.5
2 2015-09-30 1 0.5 0.5
3 2015-12-31 1 2.0 0.5
4 2015-03-31 2 0.5 1.5
5 2015-06-30 2 0.5 0.5
6 2015-09-30 2 0.5 0.5
7 2015-12-31 2 2.0 0.5
# processing
# ====================================
def func(group):
if group.Value.values[0] < group.Old.values[0]:
group.Value.values[0] = group.Old.values[0]
return group
df.groupby('Id').apply(func)
Date Id Value Old
0 2015-03-31 1 1.0 1.0
1 2015-06-30 1 0.5 0.5
2 2015-09-30 1 0.5 0.5
3 2015-12-31 1 2.0 0.5
4 2015-03-31 2 1.5 1.5
5 2015-06-30 2 0.5 0.5
6 2015-09-30 2 0.5 0.5
7 2015-12-31 2 2.0 0.5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.