从单个列值熊猫创建最大和最小列值

时间:2020-05-29 03:05:17

标签: python python-3.x pandas dataframe

我有一个像下面这样的数据框,我需要在基本列中创建两列。

输入

Kg
0.5
0.5
1
1
1
2
2
5
5
5

预期产量

Kg_From  Kg_To
0      0.5
0      0.5
0.5    1
0.5    1
0.5    1
1      2
1      2
2      5
2      5
2      5

如何在大熊猫中做到这一点?

4 个答案:

答案 0 :(得分:0)

IIUC:

kgs = df.Kg.unique()

lower = [0] + list(kgs[:-1])
kg_dict = {k:v for v,k in zip(lower,kgs)}

# new dataframe
new_df = pd.DataFrame({
             'Kg_From': df['Kg'].map(kg_dict),
             'Kg_To': df['Kg']
         })

# or if you want new columns:
df['Kg_from'] = df['Kg'].map(kg_dict)

输出:

   Kg_From  Kg_To
0      0.0    0.5
1      0.0    0.5
2      0.5    1.0
3      0.5    1.0
4      0.5    1.0
5      1.0    2.0
6      1.0    2.0
7      2.0    5.0
8      2.0    5.0
9      2.0    5.0

答案 1 :(得分:0)

假设您的*列已排序:

kg

答案 2 :(得分:0)

#get unique values and counts of each value in the Kg column
val,counts = np.unique(df.Kg,return_counts=True)

#shift forward by 1 and replace the first value with 0
val = np.roll(val,1)
val[0] = 0

#repeat the count of each value with the counts generated earlier
df['Kg_from'] = np.repeat(val,counts)

df

     Kg Kg_from
0   0.5 0.0
1   0.5 0.0
2   1.0 0.5
3   1.0 0.5
4   1.0 0.5
5   2.0 1.0
6   2.0 1.0
7   5.0 2.0
8   5.0 2.0
9   5.0 2.0

答案 3 :(得分:0)

使用zipdict映射由DataFrame.insert创建的新列,其中新列的值由np.unique进行唯一排序,而第一个0的值由{{1}添加}:

np.insert