Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数,用于使用Python列表中的变量进行数据帧操作_Python_Function_Pandas_Numpy_Dataframe - Fatal编程技术网

函数,用于使用Python列表中的变量进行数据帧操作

函数,用于使用Python列表中的变量进行数据帧操作,python,function,pandas,numpy,dataframe,Python,Function,Pandas,Numpy,Dataframe,我有一个列表list=['OUT','IN'],其中列表中的所有元素都是数据框中的变量名,并附有后缀\u3m,\u6m,\u9m,15M 名单: 列表=['OUT','IN'] 输入_df: ID OUT_3M OUT_6M OUT_9M OUT_15M IN_3M IN_6M IN_9M IN_15M A 2 3 4 6 2 3 4 6 B 3 3 5 7 3 5 7 C2 3 6 2 3 6 6 D33737 我要解决的问题是减去 1.OUT_6MfromOUT_3M并作为OUT_3M

我有一个列表
list=['OUT','IN']
,其中列表中的所有元素都是数据框中的变量名,并附有后缀
\u3m,\u6m,\u9m,15M

名单:

列表=['OUT','IN']

输入_df:

ID OUT_3M OUT_6M OUT_9M OUT_15M IN_3M IN_6M IN_9M IN_15M
A 2 3 4 6 2 3 4 6
B 3 3 5 7 3 5 7
C2 3 6 2 3 6 6
D33737

我要解决的问题是减去

1.
OUT_6M
from
OUT_3M
并作为
OUT_3M-6M

2.
OUT_9M
来自
OUT_6M
并作为
OUT_6M-9M

3.
OUT_15M
from
OUT_9M
并作为
OUT_9M-15M

同样的操作会重复到列表中的每个元素,同时保留我在示例
Output\u df
数据集中提到的
OUT\u 3M
in\u 3M

输出_df:


ID Out_3M Out_3M-6M Out_6M-9M Out_9M-15M IN_3M IN_3M-6M IN_6M-9M IN_9M-15M
A 2 1 2 1 2
B 3 0 2 2 3 0 2 2 2
C2 1 3 0 2 1 3 0
D30403040


列表中有许多元素需要对其执行操作。有没有办法通过编写函数来解决这个问题。谢谢

我不知道你所说的写函数是什么意思,你想做什么,几个for循环还不够吗?比如:

postfixes = ['3M','6M','9M','15M']
prefixes = ['IN','OUT']

# Allocate the space, while also copying _3M
output_df = input_df.copy()

# Rename a few
output_df.rename(columns={'_'.join((prefix, postfixes[i])): '_'.join((prefix, postfixes[i-1] + '-' + postfixes[i]))
                          for prefix in prefixes for i in range(1, len(postfixes))}, inplace=True)


# Compute the differences
for prefix in prefixes:
    for i in range(1,len(postfixes)):
        postfix = postfixes[i] + '-' + postfixes[i-1]
        output_df['_'.join((prefix, postfix))] = input_df['_'.join((prefix, postfixes[i-1]))].values - input_df['_'.join((prefix, postfixes[i]))].values
输出_df在开始时是输入_df的副本,既可以避免单独处理_3M的情况,也可以预先分配数据帧,而不是一次创建一列(这在代码中并不重要,但如果有数千列,则会浪费时间在内存中移动内容,否则…)

此外,您应该避免将列表称为“list”,否则在您尝试将元组转换为列表时,您会发现一些讨厌的bug