Python 在具有列表内容的数据帧的多列上使用lambda或apply

Python 在具有列表内容的数据帧的多列上使用lambda或apply,python,pandas,dataframe,lambda,Python,Pandas,Dataframe,Lambda,这可能是一个微不足道的问题。我有以下列包含列表的dataframe import pandas as pd df = pd.DataFrame({'time1': [['2000', '2300'], ['1000', '1100']], 'time2': [['2200', '2400'], ['800', '900']]}) print(df) time1 time2 0 [2000, 2300] [2200, 2400] 1 [1000, 1100] [8

这可能是一个微不足道的问题。我有以下列包含列表的dataframe

import pandas as pd
df = pd.DataFrame({'time1': [['2000', '2300'], ['1000', '1100']], 'time2': [['2200', '2400'], ['800', '900']]})
print(df)

  time1         time2
0  [2000, 2300]  [2200, 2400]
1  [1000, 1100]    [800, 900]
列表中的值表示时间间隔。我正在尝试将所有这些元素转换为时间格式

我试图得到这样的东西:

time1         time2
20:00-23:00  22:00-24:00
10:00-11:00  8:00-9:00

这是一种基于不可接受答案的间接方法。想法是将字符串拆分为小时和分钟,然后使用破折号
-

import pandas as pd
df = pd.DataFrame({'time1': [['2000', '2300'], ['1000', '1100']], 
                   'time2': [['2200', '2400'], ['800', '900']]})


def convert_to_minutes(value):
    tim = []
    for val in value:
        hours, minutes = val[0:-2], val[-2:]
        tim.append(hours + ':' + minutes)

    return '-'.join(tim)

df['time1'] = df['time1'].apply(convert_to_minutes)
df['time2'] = df['time2'].apply(convert_to_minutes)
输出

print (df)

         time1        time2
 0  20:00-23:00  22:00-24:00
 1  10:00-11:00    8:00-9:00

我们可以在这里定义我们的函数来取消列表并用
分隔符分隔字符串,然后将其应用于每一列:

functime = lambda x: '-'.join([t[:-2] + ':' + t[-2:] for t in x])

for col in df.columns:
    df[col] = df[col].apply(functime)

定义常规函数:

def functime2(x):
    val = '-'.join([t[:-2] + ':' + t[-2:] for t in x])

    return val

for col in df.columns:
    df[col] = df[col].apply(functime2)


您想要字符串类型的输出吗?还是熊猫时间差?没关系。字符串很好。我将使用applymap对存储在数据帧中的每个单独的值(在本例中是一个列表)应用一个函数。
def functime2(x):
    val = '-'.join([t[:-2] + ':' + t[-2:] for t in x])

    return val

for col in df.columns:
    df[col] = df[col].apply(functime2)
         time1        time2
0  20:00-23:00  22:00-24:00
1  10:00-11:00    8:00-9:00