熊猫数据框操作

时间:2020-04-13 14:06:43

标签: python pandas dataframe

任何人都可以向我解释如何解决此问题。

假设我有一个像这样的数据框:

Df = {'toto': ["A", "B", "C", "D"], 
      'titi': ["g", "t", "x", "z"],
      'Energy': [180, 345, 234, 654],
      'T10sec': [0.1, 0.4, 0.5, 1], 
      'T50sec': [5.3, 5.7, 8, 2]}

为此Df我创建了一个函数

def record(letter1, letter2, Energy_value, time):

我想做的是

检查是否:输入值位于此Df中,如果为yes,则

Results = Df.thecorrespondingtime[i]

假设对于列'toto''titi',输入字母位于Df中,可能出现两种情况:

案例1:输入'Energy_value'Df中,但不在'time'值中,那么我必须找到该值的范围并创建其列并用插值填充。

情况2:'time'的列值存在,但输入的能量值no。再次在这里,我需要进行插值。

我的限制是: 如何检查'time'列是否存在以及如何将其置于两个现有值之间。 输入能量值的问题相同。

在这里,我尝试了什么:

def record(letter1, letter2, Energy_value, time='T15sec'):
    For i in range(len(Df)):
        If ((df.toto[i] == letter1) and 
            (df.titi[i] == letter2) and 
            (df.Energy[i] == Energy_value) and 
            (time in df)):

但是它不起作用。 谁能帮我吗?

1 个答案:

答案 0 :(得分:0)

如果问题基本上是关于在数据帧中插入另一个时间列,那么这将是一个解决方案:

import pandas as np

df = pd.DataFrame({'toto': ["A", "B", "C", "D"], 
      'titi': ["g", "t", "x", "z"],
      'Energy': [180, 345, 234, 654],
      'T10sec': [0.1, 0.4, 0.5, 1], 
      'T50sec': [5.3, 5.7, 8, 2]})
df
    toto    titi    Energy  T10sec  T50sec
0   A       g       180     0.1     5.3
1   B       t       345     0.4     5.7
2   C       x       234     0.5     8.0
3   D       z       654     1.0     2.0

添加时间列:

import numpy as np
time = 'T15sec'

if not time in df:
    df[time] = np.NaN

df.iloc[:, 3:] = df.iloc[:, 3:].T.sort_index().interpolate().T

df[['toto', 'titi', 'Energy', 'T10sec', time, 'T50sec']]

    toto    titi    Energy  T10sec  T15sec  T50sec
0   A       g       180     0.1     2.70    5.3
1   B       t       345     0.4     3.05    5.7
2   C       x       234     0.5     4.25    8.0
3   D       z       654     1.0     1.50    2.0