Python 3.x 根据条件在数据帧中添加新行
我有一种情况,我想在满足某个条件后添加一个新行。我的dat框架如下所示:Python 3.x 根据条件在数据帧中添加新行,python-3.x,pandas,row,pandas-groupby,Python 3.x,Pandas,Row,Pandas Groupby,我有一种情况,我想在满足某个条件后添加一个新行。我的dat框架如下所示: ID Event Date 1 A 2019-11-12 1 B 2019-11-13 1 C 2019-11-18 1 D 2019-11-20 2 A
ID Event Date
1 A 2019-11-12
1 B 2019-11-13
1 C 2019-11-18
1 D 2019-11-20
2 A 2019-11-20
2 B 2019-11-20
当ID值从1变为2时,我想在两者之间添加一行。事件列单元格应包含“今天”作为事件名称,日期列应包含今天的日期
输出应该如下所示:
ID Event Date
1 A 2019-11-12
1 B 2019-11-13
1 C 2019-11-18
1 D 2019-11-20
1 Today 2020-04-24
2 A 2019-11-20
2 B 2019-11-20
我应该如何做到这一点 如果需要在每个组之间追加新行,如果有更改,请使用:
df1 = (df[df['ID'].ne(df['ID'].shift(-1).ffill())]
.assign(Event='today',
Date = pd.Timestamp.today().floor('d')))
print (df1)
ID Event Date
3 1 today 2020-04-24
或:
然后使用排序索引值添加到原始:
df = df.append(df1).sort_index(kind='mergesort')
print (df)
ID Event Date
0 1 A 2019-11-12
1 1 B 2019-11-13
2 1 C 2019-11-18
3 1 D 2019-11-20
3 1 today 2020-04-24
4 2 A 2019-11-20
5 2 B 2019-11-20
嗯!可能还有其他方法可以做到这一点,但我发现的方法如下:
ID
列还有另一个值,如果更改,是否需要添加新行?@jezrael:是的,还有其他值,如果值从一个值更改为另一个值,则应添加新行。让我试试您的解决方案,直到不起作用为止?@jezrael:no。对于许多ID,行的位置仍然不正确。我不确定这里出了什么问题,代码似乎是正确的。我正在寻找解决这个问题的另一个主要问题,我有,如果这可以很容易地解决。你介意看看那个吗?是的。那是对的。。这是我的主要痛点,我没有看到正确的输出。需要追加的新行位于错误的位置,我不确定问题的原因。我应该如何共享我的输出以向您显示?@Django0602是索引默认值?如果不确定,请尝试df=df。在我的解决方案之前重置索引(drop=True)
。
print (df1)
ID Event Date
3 1 today 2020-04-24
df = df.append(df1).sort_index(kind='mergesort')
print (df)
ID Event Date
0 1 A 2019-11-12
1 1 B 2019-11-13
2 1 C 2019-11-18
3 1 D 2019-11-20
3 1 today 2020-04-24
4 2 A 2019-11-20
5 2 B 2019-11-20
import pandas as pd
d = {'id' : [1,1,2], 'event' : ['a', 'b', 'c'], 'date':[12,21,30]}
**id event date
0 1 a 12
1 1 b 21
2 2 c 30**
to_append = pd.DataFrame({'id' : [1], 'event' : ['a'], 'date':[12]})
**id event date
0 1 a 12**
df = pd.DataFrame(d)
df1 = df.iloc[0:2, :]
df1 = df1.append(to_append)
df1 = df1.append(df2)
**id event date
0 1 a 12
1 1 b 21
0 1 a 12
2 2 c 30**