मेरे पास निम्न डेटाफ्रेम है -

ID    Name   Distance   Time   Base    Height
1     A      10         2      12      2
2     A      20         4      14      3
3     B      30         6      16      4
4     B      40         8      18      5
5     C      50         10     20      6   
6     C      60         12     22      8

मैं नए कॉलम Speed, Tarea, Speed_ratio, Tarea_ratio बनाना चाहता हूं जिनके मान पंक्तियों में मानों से A,B,C के रूप में निम्नानुसार हैं -

ID    Name   Distance   Time   Base    Height   Speed    Tarea    Speed_ratio   Tarea_ratio
1     A      10         2      12      2        5        12       1             0.5714
2     A      20         4      14      3        5        21       NA            NA   
3     B      30         6      16      4        5        32       1             0.7111 
4     B      40         8      18      5        5        45       NA            NA
5     C      50         10     20      6        5        60       1             0.6818    
6     C      60         12     22      8        5        88       NA            NA 

क्या यह किया जा सकता है? धन्यवाद।

2
Ira 5 नवम्बर 2020, 08:13

3 जवाब

सबसे बढ़िया उत्तर

आप नीचे कर सकते हैं:

In [431]: df['Speed'] = df.Distance.div(df.Time)
In [433]: df['Tarea'] = df.Base.mul(df.Height)/2

In [447]: df['Speed_ratio'] = df.Speed / df.groupby('Name').Speed.shift(-1)
    
In [450]: df['Tarea_ratio'] = df.Tarea / df.groupby('Name').Tarea.shift(-1)

In [451]: df
Out[451]: 
   ID Name  Distance  Time  Base  Height  Speed  Tarea  Speed_ratio  Tarea_ratio
0   1    A        10     2    12       2    5.0   12.0          1.0     0.571429
1   2    A        20     4    14       3    5.0   21.0          NaN          NaN
2   3    B        30     6    16       4    5.0   32.0          1.0     0.711111
3   4    B        40     8    18       5    5.0   45.0          NaN          NaN
4   5    C        50    10    20       6    5.0   60.0          1.0     0.681818
5   6    C        60    12    22       8    5.0   88.0          NaN          NaN
3
Mayank Porwal 5 नवम्बर 2020, 08:45

आप बस कॉलम के बीच ऑपरेटरों का उपयोग कर सकते हैं:

df["Speed"]=5
df["Tarea"]=df["Base"]*df["Height"]/2 # that column will have float values, if you want to have integer values, use astype() method.
1
Barış Çiçek 5 नवम्बर 2020, 08:28

आप df[key] = value का उपयोग करके नए कॉलम असाइन कर सकते हैं, जैसा कि आप किसी नेटिव dict ऑब्जेक्ट के लिए करेंगे। आपके विशेष मामले के लिए, निम्नलिखित कार्य करेगा:

df["Speed"]       = df["Distance"] / df["Time"]
df["Tarea"]       = df["Base"] * df["Height"] / 2
df["Speed_ratio"] = df["Speed"].iloc[::2] / df["Speed"].iloc[1::2].values
df["Tarea_ratio"] = df["Tarea"].iloc[::2] / df["Tarea"].iloc[1::2].values

जो निम्नलिखित pandas.DataFrame देता है:

ID  Name  Distance  Time  Base  Height  Speed  Tarea  Speed_ratio  Tarea_ratio
 1     A        10     2    12       2    5.0   12.0          1.0     0.571429
 2     A        20     4    14       3    5.0   21.0          NaN          NaN
 3     B        30     6    16       4    5.0   32.0          1.0     0.711111
 4     B        40     8    18       5    5.0   45.0          NaN          NaN
 5     C        50    10    20       6    5.0   60.0          1.0     0.681818
 6     C        60    12    22       8    5.0   88.0          NaN          NaN
1
Erick Shepherd 5 नवम्बर 2020, 08:41