python - 如何使用 Python 在一个命令中追加和设置值?

标签 python pandas dataframe append setvalue

我有以下数据框 (df):

    SERV_OR_IOR_ID   IMP_START_TIME IMP_CLR_TIME  IMP_START_TIME_BIN IMP_CLR_TIME_BIN
0     -1447310116       23:59:00     00:11:00                 47          0
1      1673545041       00:00:00     00:01:00                  0          0       
2      -743717696       23:59:00     00:00:00                 47          0
3       58641876        04:01:00     09:02:00                  8         18

我想复制 IMP_START_TIME_BIN 的行小于 IMP_CLR_TIME_BIN IMP_START_TIME_BIN 绝对差的倍数和 IMP_CLR_TIME_BIN然后在增加 IMP_START_TIME_BIN 的值的同时追加(在数据框的末尾)或最好追加到该行下方.

例如,对于第 3 行,差异为 10,因此我应该在数据框中追加 10 行,递增 IMP_START_TIME_BIN 中的值从8(不包括)到18(包括)。

结果应该是这样的:

    SERV_OR_IOR_ID   IMP_START_TIME IMP_CLR_TIME  IMP_START_TIME_BIN IMP_CLR_TIME_BIN
0     -1447310116       23:59:00     00:11:00                 47          0
1      1673545041       00:00:00     00:01:00                  0          0       
2      -743717696       23:59:00     00:00:00                 47          0
3       58641876        04:01:00     09:02:00                  8         18
4       58641876        04:01:00     09:02:00                  9         18
...      ...             ...          ...                     ...        ...
13      58641876        04:01:00     09:02:00                 18         18

为此,我尝试执行以下操作,但没有成功:

for i in range(len(df)): if df.ix[i,3] < df.ix[i,4]: for j in range(df.ix[i,3]+1, df.ix[i,4]+1): df = df.append((df.set_value(i,'IMP_START_TIME_BIN',j))*abs(df.ix[i,3] - df.ix[i,4]))

我该怎么做?

最佳答案

您可以使用此解决方案,只有必要的索引值必须是唯一的:

#first filter only values for repeating
l = df['IMP_CLR_TIME_BIN'] - df['IMP_START_TIME_BIN']
l = l[l > 0] 
print (l)
3    10
dtype: int64

#repeat rows by repeating index values
df1 = df.loc[np.repeat(l.index.values,l.values)].copy()

#add counter to column IMP_START_TIME_BIN
#better explanation http://stackoverflow.com/a/43518733/2901002
a = pd.Series(df1.index == df1.index.to_series().shift())
b = a.cumsum()
a = b.sub(b.mask(a).ffill().fillna(0).astype(int)).add(1)
df1['IMP_START_TIME_BIN'] = df1['IMP_START_TIME_BIN'] + a.values

#append to original df, if necessary sort
df = df.append(df1, ignore_index=True).sort_values('SERV_OR_IOR_ID')
print (df)
    SERV_OR_IOR_ID IMP_START_TIME IMP_CLR_TIME  IMP_START_TIME_BIN  \
0      -1447310116       23:59:00     00:11:00                  47   
1       1673545041       00:00:00     00:01:00                   0   
2       -743717696       23:59:00     00:00:00                  47   
3         58641876       04:01:00     09:02:00                   8   
4         58641876       04:01:00     09:02:00                   9   
5         58641876       04:01:00     09:02:00                  10   
6         58641876       04:01:00     09:02:00                  11   
7         58641876       04:01:00     09:02:00                  12   
8         58641876       04:01:00     09:02:00                  13   
9         58641876       04:01:00     09:02:00                  14   
10        58641876       04:01:00     09:02:00                  15   
11        58641876       04:01:00     09:02:00                  16   
12        58641876       04:01:00     09:02:00                  17   
13        58641876       04:01:00     09:02:00                  18   

    IMP_CLR_TIME_BIN  
0                  0  
1                  0  
2                  0  
3                 18  
4                 18  
5                 18  
6                 18  
7                 18  
8                 18  
9                 18  
10                18  
11                18  
12                18  
13                18  

关于python - 如何使用 Python 在一个命令中追加和设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626484/

相关文章:

python - 如何将键值对插入 python 列表?

python - 用python下载谷歌图片无法下载图片

python - Pandas:根据现有列的值创建新列

python - 如何使用 numpy.logic_and 打印多个数组的元素?

python - 在 Python 中使用其他 JSON 更改 JSON 值

python - 根据 panda 数据帧的索引从稀疏矩阵中选择行

python - Pandas 中的条件累积和

python - 根据每个数据帧中的值对数据帧列表中数据帧的顺序进行排序

python - 根据另一个数据框的值在数据框中添加行

python - Pandas:在数据框中创建一个新列,其中的值是根据现有列计算得出的,即。计算最大值