python中dateframe修改指定数据

需要解决dateframe指定行数据修改
具体需求:在Excel通过pandas读取后,只对date列为2023-09-12的con_limit_up列大于等于4数据乘系数0.7和date列为2023-09-11的con_limit_up列大于等于4数据乘系数0.4,其他时间列con_limit_up列数据赋值为0,其他数据保持不变。 2023-09-13的数值是不处理不变的,在上述基础上还有个遗漏问题需要解决:如果2023-09-12的stock在2023-09-13的stock里面出现也要把该2023-09-12的con_limit_up赋值为0,同样2023-09-11的stock在2023-09-13和2023-09-12的stock里面出现也要把该2023-09-11的con_limit_up赋值为0
amount date stock con_limit_up weight close volume
9 2023-09-10 SZSE.002855 7 0.24137931 21.01 39373185
9 2023-09-10 SZSE.000536 6 0.206896552 3.19 329833157
9 2023-09-10 SHSE.605588 3 0.103448276 55.73 638000
9 2023-09-10 SHSE.600895 3 0.103448276 21.58 61082752
9 2023-09-10 SZSE.002767 2 0.068965517 18.23 2123598
9 2023-09-10 SZSE.002338 2 0.068965517 42.55 21839136
9 2023-09-10 SZSE.001296 2 0.068965517 27.39 19882309
9 2023-09-10 SHSE.688418 2 0.068965517 23.38 49512234
9 2023-09-10 SHSE.605365 2 0.068965517 18.03 19213361
23 2023-09-11 SZSE.002855 8 0.19047619 23.11 54270864
23 2023-09-11 SHSE.600895 4 0.095238095 23.74 282015669
23 2023-09-11 SHSE.605588 4 0.095238095 61.3 512700
23 2023-09-11 SZSE.002338 3 0.071428571 46.81 51592271
23 2023-09-11 SZSE.000851 2 0.047619048 6.28 166561817
23 2023-09-11 SZSE.001268 2 0.047619048 26.74 2165902
23 2023-09-11 SZSE.002341 2 0.047619048 3.85 67159908
23 2023-09-11 SZSE.002642 2 0.047619048 8.56 13486606
23 2023-09-11 SHSE.600100 1 0.023809524 7.58 108112428
23 2023-09-11 SHSE.600415 1 0.023809524 9.71 221443582
23 2023-09-11 SHSE.603306 1 0.023809524 35.33 31491532
23 2023-09-11 SHSE.603626 1 0.023809524 7.89 14757433
23 2023-09-11 SHSE.603669 1 0.023809524 5.16 10873009
23 2023-09-11 SZSE.000766 1 0.023809524 8.56 32792645
23 2023-09-11 SZSE.001313 1 0.023809524 9.23 14784125
23 2023-09-11 SZSE.002145 1 0.023809524 5.75 83848262
23 2023-09-11 SZSE.002207 1 0.023809524 8.01 44110395
23 2023-09-11 SZSE.002284 1 0.023809524 10.37 70841077
23 2023-09-11 SZSE.002577 1 0.023809524 16.41 27840466
23 2023-09-11 SZSE.002795 1 0.023809524 8.8 36522471
23 2023-09-11 SZSE.002902 1 0.023809524 24.89 38906542
23 2023-09-11 SZSE.002970 1 0.023809524 33.33 10525270
23 2023-09-11 SZSE.002995 1 0.023809524 25.42 8306519
25 2023-09-12 SZSE.000536 6 0.157894737 3.2 565375316
25 2023-09-12 SZSE.000851 3 0.078947368 6.91 106487499
25 2023-09-12 SZSE.001268 3 0.078947368 29.41 19713282
25 2023-09-12 SHSE.605365 2 0.052631579 18.32 14024907
25 2023-09-12 SZSE.000766 2 0.052631579 9.42 71311125
25 2023-09-12 SZSE.001313 2 0.052631579 10.15 38803817
25 2023-09-12 SZSE.002902 2 0.052631579 27.38 30893387
25 2023-09-12 SHSE.600186 1 0.026315789 5.29 161293039
25 2023-09-12 SHSE.600520 1 0.026315789 14.89 10034810
25 2023-09-12 SHSE.600719 1 0.026315789 8.12 41404562
25 2023-09-12 SHSE.600725 1 0.026315789 3.17 14274270
25 2023-09-12 SHSE.600839 1 0.026315789 4.59 412941033
25 2023-09-12 SHSE.601188 1 0.026315789 3.64 49422043
25 2023-09-12 SHSE.601908 1 0.026315789 5.2 65575524
25 2023-09-12 SHSE.603023 1 0.026315789 4.73 18327062
25 2023-09-12 SHSE.603348 1 0.026315789 42.67 10926463
25 2023-09-12 SHSE.603607 1 0.026315789 18.15 14904642
25 2023-09-12 SHSE.603887 1 0.026315789 8.8 57091704
25 2023-09-12 SHSE.603917 1 0.026315789 21.77 7014520
25 2023-09-12 SZSE.000813 1 0.026315789 3.49 52677883
25 2023-09-12 SZSE.002165 1 0.026315789 4.71 121205722
25 2023-09-12 SZSE.002166 1 0.026315789 8.12 75224640
25 2023-09-12 SZSE.002281 1 0.026315789 31.85 50268337
25 2023-09-12 SZSE.002355 1 0.026315789 7.44 132727319
25 2023-09-12 SZSE.002957 1 0.026315789 17.71 20109535
19 2023-09-13 SZSE.000536 7 0.2 3.52 293595726
19 2023-09-13 SZSE.001268 4 0.114285714 32.35 18565980
19 2023-09-13 SHSE.605365 3 0.085714286 20.15 2007471
19 2023-09-13 SZSE.000766 3 0.085714286 10.36 131570441
19 2023-09-13 SZSE.002855 3 0.085714286 24.27 48837726
19 2023-09-13 SHSE.603607 2 0.057142857 19.97 11755208
19 2023-09-13 SHSE.600802 1 0.028571429 5.73 43656592
19 2023-09-13 SHSE.603162 1 0.028571429 18.9 14676241
19 2023-09-13 SHSE.603909 1 0.028571429 14.03 2030741
19 2023-09-13 SHSE.603933 1 0.028571429 18.6 11165879
19 2023-09-13 SZSE.000010 1 0.028571429 3.1 84282602
19 2023-09-13 SZSE.000058 1 0.028571429 7.94 67060210
19 2023-09-13 SZSE.000592 1 0.028571429 2.89 67469358
19 2023-09-13 SZSE.000632 1 0.028571429 4.74 56950460
19 2023-09-13 SZSE.000797 1 0.028571429 3.64 132246663
19 2023-09-13 SZSE.000826 1 0.028571429 4.55 202059849
19 2023-09-13 SZSE.002310 1 0.028571429 2.7 267288976
19 2023-09-13 SZSE.002761 1 0.028571429 14.93 53325888
19 2023-09-13 SZSE.003016 1 0.028571429 10.8 3288053


import pandas as pd

df=pd.DataFrame(columns=['amount' ,'date' ,'stock' ,'con_limit_up' ,'weight' ,'close', 'volume']
                  ,data=[[1,'2023-09-10','SZSE.002855' ,7 ,0.24137931 ,21.01, 39373185],
                         [2, '2023-09-11' ,'SZSE.002855', 8 ,0.19047619 ,23.11, 54270864],
                         [3 ,'2023-09-12', 'SZSE.000536' ,6, 0.206896552 ,3.19 ,329833157]])
df.loc[(df['date'] == '2023-09-12') & (df['con_limit_up'] >= 4), 'con_limit_up'] *= 0.7
df.loc[(df['date'] == '2023-09-11') & (df['con_limit_up'] >= 4), 'con_limit_up'] *= 0.4
df.loc[(df['date']!='2023-09-12') & (df['date']!='2023-09-11'),'con_limit_up']=0

img

import pandas as pd

# 读取Excel文件
df = pd.read_excel('data.xlsx')

# 将日期列转换为datetime类型
df['date'] = pd.to_datetime(df['date'])

# 获取日期列中的日期
date_23 = df[df['date'].dt.strftime('%Y-%m-%d') == '2023-09-12']['con_limit_up'].values[0]
date_24 = df[df['date'].dt.strftime('%Y-%m-%d') == '2023-09-13']['con_limit_up'].values[0]

# 根据条件修改数据
df.loc[(df['date'] == date_23) & (df['con_limit_up'] >= 4), 'con_limit_up'] *= 0.7
df.loc[(df['date'] == date_24) & (df['con_limit_up'] >= 4), 'con_limit_up'] *= 0.4

# 将修改后的数据保存到新的Excel文件
df.to_excel('modified_data.xlsx', index=False)

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

引用 皆我百晓生 小程序回复内容作答:

你可以使用以下代码来实现你的需求:

import pandas as pd

# 读取Excel文件
df = pd.read_excel('your_excel_file.xlsx')

# 根据条件修改数据
df.loc[(df['date'] == '2023-09-12') & (df['con_limit_up'] >= 4), 'con_limit_up'] *= 0.7
df.loc[(df['date'] == '2023-09-11') & (df['con_limit_up'] >= 4), 'con_limit_up'] *= 0.4
df.loc[df['con_limit_up'] < 4, 'con_limit_up'] = 0

# 打印修改后的DataFrame
print(df)

这个代码假设你的Excel文件名为your_excel_file.xlsx,你需要将文件名替换成你实际的文件名。代码首先使用pd.read_excel函数读取Excel文件并将其转换成DataFrame。然后使用.loc方法对DataFrame进行条件筛选和修改。最后打印修改后的DataFrame。

请注意,在实际使用中,你需要根据你的Excel文件的具体列名进行修改。

结合GPT给出回答如下请题主参考
假设我们已经将Excel读取为一个名为df的DataFrame对象,包括两列,日期列date和限制列con_limit_up,代码如下:

import pandas as pd

df = pd.read_excel('file.xlsx')

接下来,我们可以使用pandas中的条件索引功能进行子集选择,找出限制大于等于4且日期为2023-09-12的行,代码如下:

subset = df[(df['date'] == '2023-09-12') & (df['con_limit_up'] >= 4)]

然后,我们可以在子集上进行修改,将con_limit_up列中符合条件的数据乘以0.7,代码如下:

subset['con_limit_up'] *= 0.7

最后,我们将修改后的子集更新回原始DataFrame中,代码如下:

df.update(subset)

完整代码:

import pandas as pd

df = pd.read_excel('file.xlsx')

subset = df[(df['date'] == '2023-09-12') & (df['con_limit_up'] >= 4)]
subset['con_limit_up'] *= 0.7

df.update(subset)

【以下回答由 GPT 生成】

可以使用以下代码来实现该需求:

import pandas as pd

df.loc[(df['date'] == '2023-09-12') & (df['con_limit_up'] >= 4), 'amount'] *= 0.7
df.loc[(df['date'] == '2023-09-11') & (df['con_limit_up'] >= 4), 'amount'] *= 0.4
df.loc[df['con_limit_up'] < 4, 'amount'] = 0

print(df)

首先,使用loc函数对DataFrame进行筛选和赋值操作。在第一行代码中,使用条件df['date'] == '2023-09-12'df['con_limit_up'] >= 4筛选出满足日期和con_limit_up列条件的数据,然后将这些数据的amount列乘以0.7。 在第二行代码中,使用条件df['date'] == '2023-09-11'df['con_limit_up'] >= 4筛选出满足日期和con_limit_up列条件的数据,然后将这些数据的amount列乘以0.4。 在第三行代码中,使用条件df['con_limit_up'] < 4筛选出con_limit_up列小于4的数据,然后将这些数据的amount列赋值为0。 最后,打印修改后的DataFrame。

希望以上解决方案对您有所帮助。如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

需要读取 Excel 数据并对 DataFrame 进行操作,然后根据日期和 con_limit_up 的条件对数据进行修改
示例代码

import pandas as pd

# 读取 Excel 文件
df = pd.read_excel('your_excel_file.xlsx')

# 创建条件筛选
condition_1 = (df['date'] == '2023-09-12') & (df['con_limit_up'] >= 4)
condition_2 = (df['date'] == '2023-09-11') & (df['con_limit_up'] >= 4)

# 对符合条件的数据应用不同的乘法因子
df.loc[condition_1, 'con_limit_up'] *= 0.7
df.loc[condition_2, 'con_limit_up'] *= 0.4

# 将其他时间列的 con_limit_up 设置为0
df.loc[~(condition_1 | condition_2), 'con_limit_up'] = 0

# 输出修改后的 DataFrame
print(df)


确保将 'your_excel_file.xlsx' 替换为你的 Excel 文件的实际路径。这段代码首先读取 Excel 文件并创建了两个条件筛选(condition_1 和 condition_2),然后使用 .loc 方法将符合条件的数据乘以相应的因子,并将不符合条件的数据的 con_limit_up 列设置为0。最后,输出修改后的 DataFrame。

df直接行列修改就行

修改DataFrame指定数据行的内容(Python)


Python_Dataframe_对某列内容进行编辑_python dataframe 修改某列内容_羊羊麾下的发电站的博客-CSDN博客 剔除某列前后几个字符——map剔除(保留)某列前后几个字符需要用到map函数,主要思路为,在map中将列类型转为字符串(str)进而进行剔除活保留操作。替换某列指定内容——replace替换某列指定内容需要用到replace函数,主要思路为,先将列类型转换为字符串(str)进而进行内容替换。..._python dataframe 修改某列内容 https://blog.csdn.net/gisaavg/article/details/126030634